24 typedef std::map<std::string, graphmlt::node_indext>
name_mapt;
27 const std::string &
name,
31 std::pair<name_mapt::iterator, bool> entry=
32 name_to_node.insert(std::make_pair(name, 0));
34 entry.first->second=graph.
add_node();
36 return entry.first->second;
42 std::map<std::string, std::map<std::string, std::string> > &defaults,
44 std::string &entrynode)
51 add_node(node_name, name_to_node, dest);
59 for(xmlt::elementst::const_iterator
64 assert(e_it->name==
"data");
66 if(e_it->get_attribute(
"key")==
"violation" &&
69 else if(e_it->get_attribute(
"key")==
"threadNumber")
71 else if(e_it->get_attribute(
"key")==
"entry" &&
76 else if(xml.
name==
"edge")
87 std::map<std::string, std::string> &edge_defaults=defaults[
"edge"];
88 for(std::map<std::string, std::string>::const_iterator
89 it=edge_defaults.begin();
90 it!=edge_defaults.end();
94 for(xmlt::elementst::const_iterator
108 dest[s].
out[t].xml_node=xml_w_defaults;
109 dest[t].
in[s].xml_node=xml_w_defaults;
111 else if(xml.
name==
"graphml" ||
114 for(xmlt::elementst::const_iterator
127 else if(xml.
name==
"key")
129 for(xmlt::elementst::const_iterator
133 if(e_it->name==
"default")
137 else if(xml.
name==
"data")
155 assert(dest.
empty());
158 std::map<std::string, std::map<std::string, std::string> > defaults;
159 std::string entrynode;
169 for(std::size_t i=0; !err && i<dest.
size(); ++i)
176 assert(!entrynode.empty());
177 name_mapt::const_iterator it=name_to_node.find(entrynode);
178 assert(it!=name_to_node.end());
192 if(
parse_xml(is,
"", message_handler, xml))
199 const std::string &filename,
206 if(
parse_xml(filename, message_handler, xml))
214 xmlt graphml(
"graphml");
217 "http://www.w3.org/2001/XMLSchema-instance");
220 "http://graphml.graphdrawing.org/xmlns");
507 bool entry_done=
false;
556 for(graphmlt::edgest::const_iterator
563 os <<
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n";
std::string invariant_scope
static bool build_graph(const xmlt &xml, graphmlt &dest, graphmlt::node_indext &entry)
xmlt xml(const source_locationt &location)
std::string get_attribute(const std::string &attribute) const
std::map< std::string, graphmlt::node_indext > name_mapt
static bool build_graph_rec(const xmlt &xml, name_mapt &name_to_node, std::map< std::string, std::map< std::string, std::string > > &defaults, graphmlt &dest, std::string &entrynode)
const edgest & out(node_indext n) const
void set_attribute(const std::string &attribute, unsigned value)
static graphmlt::node_indext add_node(const std::string &name, name_mapt &name_to_node, graphmlt &graph)
nodet::node_indext node_indext
xmlt & new_element(const std::string &name)
unsigned safe_string2unsigned(const std::string &str, int base)
bool write_graphml(const graphmlt &src, std::ostream &os)
Read/write graphs as GraphML.
bool read_graphml(std::istream &is, graphmlt &dest, graphmlt::node_indext &entry)
const edgest & in(node_indext n) const
bool parse_xml(std::istream &in, const std::string &filename, message_handlert &message_handler, xmlt &dest)