# HG changeset patch # User deba # Date 1138118858 0 # Node ID 723b2b81d900d9dc3f895be44d2fd0379c4a78fa # Parent b16ca599472fff47ac10934c373816d6e87a3c88 Lemon Graph Format uses label instead of id named map. diff -r b16ca599472f -r 723b2b81d900 demo/coloring.lgf --- a/demo/coloring.lgf Thu Jan 19 16:56:39 2006 +0000 +++ b/demo/coloring.lgf Tue Jan 24 16:07:38 2006 +0000 @@ -1,5 +1,5 @@ @nodeset -coords id +coords label (162, 142) 10 (169, -35) 9 (-154, -37) 8 @@ -12,7 +12,7 @@ (157, -150) 1 (-282, -149) 0 @undiredgeset - id + label 9 10 17 1 9 15 3 9 14 diff -r b16ca599472f -r 723b2b81d900 demo/dir_components.lgf --- a/demo/dir_components.lgf Thu Jan 19 16:56:39 2006 +0000 +++ b/demo/dir_components.lgf Tue Jan 24 16:07:38 2006 +0000 @@ -1,5 +1,5 @@ @nodeset -coordinates_x coordinates_y id +coordinates_x coordinates_y label 218.178 27.2723 19 157.79 -130.517 18 44.8044 15.5841 17 @@ -20,7 +20,7 @@ -227.918 -40.9084 2 -389.604 -136.361 1 @edgeset - id + label 17 19 23 19 18 24 18 17 25 diff -r b16ca599472f -r 723b2b81d900 demo/graph_orientation.cc --- a/demo/graph_orientation.cc Thu Jan 19 16:56:39 2006 +0000 +++ b/demo/graph_orientation.cc Tue Jan 24 16:07:38 2006 +0000 @@ -49,13 +49,13 @@ ListGraph g; ListGraph::NodeMap f(g); //in-deg requirement; - ListGraph::NodeMap id(g); + ListGraph::NodeMap label(g); ListGraph::NodeMap > coords(g); try { GraphReader reader(argv[1],g); reader.readNodeMap("f",f); - reader.readNodeMap("id",id); + reader.readNodeMap("label",label); reader.readNodeMap("coordinates_x",xMap(coords)); reader.readNodeMap("coordinates_y",yMap(coords)); reader.run(); @@ -80,15 +80,15 @@ Node act; while((act=IterableBoolNodeMap::TrueIt(active))!=INVALID) { - std::cout << "Process node " << id[act] + std::cout << "Process node " << label[act] << " (def=" << def[act] << " lev=" << level[act] << "): "; OutEdgeIt e(g,act); while(e!=INVALID && level[g.target(e)]>=level[act]) ++e; if(e!=INVALID) { std::cout << " REVERT EDGE " << g.id(e) - << " (" << id[g.source(e)] << "---" - << id[g.target(e)] << ")" + << " (" << label[g.source(e)] << "---" + << label[g.target(e)] << ")" << std::endl; if(--def[act]==0) active[act]=false; if(++def[g.target(e)]>0) active[g.target(e)]=true; diff -r b16ca599472f -r 723b2b81d900 demo/graph_orientation.lgf --- a/demo/graph_orientation.lgf Thu Jan 19 16:56:39 2006 +0000 +++ b/demo/graph_orientation.lgf Tue Jan 24 16:07:38 2006 +0000 @@ -1,5 +1,5 @@ @nodeset -coordinates_x coordinates_y f id +coordinates_x coordinates_y f label -198 -73 2 7 120 30 4 6 -17 222 1 5 @@ -8,7 +8,7 @@ -28 -93 1 2 -131 83 3 1 @edgeset - id + label 7 6 3 1 6 2 2 6 1 diff -r b16ca599472f -r 723b2b81d900 demo/partitions.lgf --- a/demo/partitions.lgf Thu Jan 19 16:56:39 2006 +0000 +++ b/demo/partitions.lgf Tue Jan 24 16:07:38 2006 +0000 @@ -1,5 +1,5 @@ @nodeset -coordinates_x coordinates_y id +coordinates_x coordinates_y label 513.857 -446.322 23 393.468 566.711 22 869.153 52.8539 21 @@ -24,7 +24,7 @@ -607.82 -246.651 2 -274 -131 1 @undiredgeset - id + label 12 23 15 13 23 14 4 22 23 diff -r b16ca599472f -r 723b2b81d900 demo/route.lgf --- a/demo/route.lgf Thu Jan 19 16:56:39 2006 +0000 +++ b/demo/route.lgf Tue Jan 24 16:07:38 2006 +0000 @@ -1,5 +1,5 @@ @nodeset -id coordinates_x coordinates_y +label coordinates_x coordinates_y 9 447.907 578.328 8 79.2573 909.464 7 878.677 960.04 @@ -11,7 +11,7 @@ 1 408.248 577.327 0 189.239 92.5316 @edgeset - length id + length label 2 3 901.074 0 8 5 270.85 1 6 9 601.553 2 diff -r b16ca599472f -r 723b2b81d900 demo/sample.lgf --- a/demo/sample.lgf Thu Jan 19 16:56:39 2006 +0000 +++ b/demo/sample.lgf Tue Jan 24 16:07:38 2006 +0000 @@ -1,5 +1,5 @@ @nodeset -id coordinates_x coordinates_y +label coordinates_x coordinates_y 5 796.398 208.035 4 573.002 63.002 3 568.549 401.748 @@ -7,7 +7,7 @@ 1 288.248 397.327 0 102.239 257.532 @edgeset - id capacity + label capacity 4 5 6 8 3 5 5 8 2 4 4 5 diff -r b16ca599472f -r 723b2b81d900 demo/sub_gad_input.lgf --- a/demo/sub_gad_input.lgf Thu Jan 19 16:56:39 2006 +0000 +++ b/demo/sub_gad_input.lgf Tue Jan 24 16:07:38 2006 +0000 @@ -1,5 +1,5 @@ @nodeset -id +label 6 5 4 @@ -8,7 +8,7 @@ 1 0 @edgeset - id length + label length 5 6 9 4 4 6 8 2 3 5 7 1 diff -r b16ca599472f -r 723b2b81d900 demo/undir_components.lgf --- a/demo/undir_components.lgf Thu Jan 19 16:56:39 2006 +0000 +++ b/demo/undir_components.lgf Tue Jan 24 16:07:38 2006 +0000 @@ -1,5 +1,5 @@ @nodeset -coordinates_x coordinates_y id +coordinates_x coordinates_y label 574.035 177.301 44 694.579 115.483 43 280.402 10.3938 42 @@ -44,7 +44,7 @@ -689.204 -237.261 32 -567.302 43.6423 33 @undiredgeset - id + label 41 42 44 40 42 43 37 40 49 diff -r b16ca599472f -r 723b2b81d900 doc/graph_io.dox --- a/doc/graph_io.dox Thu Jan 19 16:56:39 2006 +0000 +++ b/doc/graph_io.dox Tue Jan 24 16:07:38 2006 +0000 @@ -31,13 +31,13 @@ The next line contains the names of the nodemaps, separated by whitespaces. Each following line describes a node in the graph: it contains the values of the -maps in the right order. The map named "id" should contain unique values -because it is regarded as an ID-map. These ids need not be numbers but they +maps in the right order. The map named "label" should contain unique values +because it is regarded as a label map. These labels need not be numbers but they must identify the nodes uniquely for later reference. For example: \code @nodeset -id x-coord y-coord color +label x-coord y-coord color 3 1.0 4.0 blue 5 2.3 5.7 red 12 7.8 2.3 green @@ -50,17 +50,17 @@ The next line contains the whitespace separated list of names of the edge maps. Each of the next lines describes one edge. The first two elements in -the line are the IDs of the source and target (or tail and head) nodes of the -edge as they occur in the ID node map of the nodeset section. You can also -have an optional ID map on the edges for later reference (which has to be +the line are the labels of the source and target (or tail and head) nodes of the +edge as they occur in the label node map of the nodeset section. You can also +have an optional label map on the edges for later reference (which has to be unique in this case). \code @edgeset - id weight label -3 5 a 4.3 a-edge -5 12 c 2.6 c-edge -3 12 g 3.4 g-edge + label weight note +3 5 a 4.3 a-edge +5 12 c 2.6 c-edge +3 12 g 3.4 g-edge \endcode The \e nodes section contains labeled (distinguished) nodes @@ -70,7 +70,7 @@ \@nodes Each of the next lines contains a label for a node in the graph -and then the ID as described in the \e nodeset section. +and then the label as described in the \e nodeset section. \code @nodes @@ -80,7 +80,7 @@ The last section describes the labeled (distinguished) edges (i.e. edges having a special label on them). It starts with \c \@edges -and then each line contains the name of the edge and the ID. +and then each line contains the name of the edge and the label. \code @edges @@ -103,9 +103,7 @@ version 12 \endcode - \@end - -line. +Finally, the file should be closed with \c \@end line. \section use Using graph input-output @@ -132,14 +130,14 @@ function declares a \c NodeMap writing command in the \ref lemon::GraphWriter "GraphWriter". You should give a name to the map and the map -object as parameters. The NodeMap writing command with name "id" should write a -unique map because it will be regarded as an ID map. +object as parameters. The NodeMap writing command with name "label" should write a +unique map because it will be regarded as a label map. \see IdMap, DescriptorMap \code -IdMap nodeIdMap; -writer.writeNodeMap("id", nodeIdMap); +IdMap nodeLabelMap; +writer.writeNodeMap("label", nodeLabelMap); writer.writeNodeMap("x-coord", xCoordMap); writer.writeNodeMap("y-coord", yCoordMap); @@ -157,7 +155,7 @@ writer.writeEdgeMap("descriptor", edgeDescMap); writer.writeEdgeMap("weight", weightMap); -writer.writeEdgeMap("label", labelMap); +writer.writeEdgeMap("note", noteMap); \endcode With \ref lemon::GraphWriter::writeNode() "writeNode()" @@ -314,10 +312,10 @@ The global functionality of the reader class can be changed by giving a special template parameter to the GraphReader class. By default, the template parameter is \c DefaultReaderTraits. A reader traits class -should provide an inner template class Reader for each type, and a +should provide a nested template class Reader for each type, and a DefaultReader for skipping a value. -The specialization of writing is very similar to that of reading. +The specialization of writing is very similar to that of reading. \section undir Undirected graphs @@ -333,10 +331,10 @@ \code @undiredgeset - id capacity +flow -flow -32 2 1 4.3 2.0 0.0 -21 21 5 2.6 0.0 2.6 -21 12 8 3.4 0.0 0.0 + label capacity +flow -flow +32 2 1 4.3 2.0 0.0 +21 21 5 2.6 0.0 2.6 +21 12 8 3.4 0.0 0.0 \endcode The \c edges section is changed to \c undiredges section. This section @@ -461,7 +459,7 @@ Because both the \ref lemon::GraphReader "GraphReader" and the \ref lemon::UndirGraphReader "UndirGraphReader" can be converted to \ref lemon::LemonReader "LemonReader" -and it can resolve the ID's of the items, the previous +and it can resolve the label's of the items, the previous result can be achived with the \ref lemon::UndirGraphReader "UndirGraphReader" class, too. diff -r b16ca599472f -r 723b2b81d900 gui/graphocska.lgf --- a/gui/graphocska.lgf Thu Jan 19 16:56:39 2006 +0000 +++ b/gui/graphocska.lgf Tue Jan 24 16:07:38 2006 +0000 @@ -1,5 +1,5 @@ @nodeset -id coordinates_x coordinates_y data +label coordinates_x coordinates_y data 1 230 -80 1.123 2 230 100 3.234 3 120 -80 5.345 diff -r b16ca599472f -r 723b2b81d900 lemon/graph_reader.h --- a/lemon/graph_reader.h Thu Jan 19 16:56:39 2006 +0000 +++ b/lemon/graph_reader.h Tue Jan 24 16:07:38 2006 +0000 @@ -67,8 +67,7 @@ /// \code /// reader.readNodeMap("coords", coords); /// - /// reader.readNodeMap("label", labelMap); - /// reader.skipNodeMap("description"); + /// reader.skipNodeMap("description", desc); /// /// reader.readNodeMap("color", colorMap); /// \endcode @@ -306,20 +305,28 @@ reader->run(); } - /// \brief Gives back the node by its id. + + /// \brief Returns true if the reader can give back the items by its label. /// - /// It reads an id from the stream and gives back which node belongs to - /// it. It is possible only if there was read an "id" named node map. - Node readId(std::istream& is, Node) const { - return nodeset_reader.readId(is, Node()); + /// \brief Returns true if the reader can give back the items by its label. + bool isLabelReader() const { + return nodeset_reader.isLabelReader() && edgeset_reader.isLabelReader(); + } + + /// \brief Gives back the node by its label. + /// + /// It reads an label from the stream and gives back which node belongs to + /// it. It is possible only if there was read an "label" named node map. + void readLabel(std::istream& is, Node& node) const { + nodeset_reader.readLabel(is, node); } - /// \brief Gives back the edge by its id. + /// \brief Gives back the edge by its label. /// - /// It reads an id from the stream and gives back which edge belongs to - /// it. It is possible only if there was read an "id" named edge map. - Edge readId(std::istream& is, Edge) const { - return edgeset_reader.readId(is, Edge()); + /// It reads an label from the stream and gives back which edge belongs to + /// it. It is possible only if there was read an "label" named edge map. + void readLabel(std::istream& is, Edge& edge) const { + return edgeset_reader.readLabel(is, edge); } private: @@ -404,8 +411,7 @@ /// \code /// reader.readNodeMap("coords", coords); /// - /// reader.readNodeMap("label", labelMap); - /// reader.skipNodeMap("description"); + /// reader.skipNodeMap("description", desc); /// /// reader.readNodeMap("color", colorMap); /// \endcode @@ -704,29 +710,38 @@ reader->run(); } - /// \brief Gives back the node by its id. + + /// \brief Returns true if the reader can give back the items by its label. /// - /// It reads an id from the stream and gives back which node belongs to - /// it. It is possible only if there was read an "id" named node map. - Node readId(std::istream& is, Node) const { - return nodeset_reader.readId(is, Node()); + /// \brief Returns true if the reader can give back the items by its label. + bool isLabelReader() const { + return nodeset_reader.isLabelReader() && + undir_edgeset_reader.isLabelReader(); + } + + /// \brief Gives back the node by its label. + /// + /// It reads an label from the stream and gives back which node belongs to + /// it. It is possible only if there was read an "label" named node map. + void readLabel(std::istream& is, Node& node) const { + return nodeset_reader.readLabel(is, node); } - /// \brief Gives back the edge by its id. + /// \brief Gives back the edge by its label. /// - /// It reads an id from the stream and gives back which edge belongs to - /// it. It is possible only if there was read an "id" named edge map. - Edge readId(std::istream& is, Edge) const { - return undir_edgeset_reader.readId(is, Edge()); + /// It reads an label from the stream and gives back which edge belongs to + /// it. It is possible only if there was read an "label" named edge map. + void readLabel(std::istream& is, Edge& edge) const { + return undir_edgeset_reader.readLabel(is, edge); } - /// \brief Gives back the undirected edge by its id. + /// \brief Gives back the undirected edge by its label. /// - /// It reads an id from the stream and gives back which undirected edge - /// belongs to it. It is possible only if there was read an "id" named + /// It reads an label from the stream and gives back which undirected edge + /// belongs to it. It is possible only if there was read an "label" named /// edge map. - UndirEdge readId(std::istream& is, UndirEdge) const { - return undir_edgeset_reader.readId(is, UndirEdge()); + void readLabel(std::istream& is, UndirEdge& uedge) const { + return undir_edgeset_reader.readLabel(is, uedge); } diff -r b16ca599472f -r 723b2b81d900 lemon/graph_writer.h --- a/lemon/graph_writer.h Thu Jan 19 16:56:39 2006 +0000 +++ b/lemon/graph_writer.h Tue Jan 24 16:07:38 2006 +0000 @@ -54,12 +54,12 @@ /// The \c writeNodeMap() function declares a \c NodeMap writing /// command in the \c GraphWriter. You should give as parameter /// the name of the map and the map object. The NodeMap writing - /// command with name "id" should write a unique map because it - /// is regarded as ID map (such a map is essential if the graph has edges). + /// command with name "label" should write a unique map because it + /// is regarded as label map (such a map is essential if the graph has edges). /// /// \code - /// IdMap nodeIdMap; - /// writer.writeNodeMap("id", nodeIdMap); + /// IdMap nodeLabelMap; + /// writer.writeNodeMap("label", nodeLabelMap); /// /// writer.writeNodeMap("coords", coords); /// writer.writeNodeMap("color", colorMap); @@ -253,20 +253,20 @@ writer->run(); } - /// \brief Write the id of the given node. + /// \brief Write the label of the given node. /// - /// It writes the id of the given node. If there was written an "id" + /// It writes the label of the given node. If there was written an "label" /// named node map then it will write the map value belonging to the node. - void writeId(std::ostream& os, const Node& item) const { - nodeset_writer.writeId(os, item); + void writeLabel(std::ostream& os, const Node& item) const { + nodeset_writer.writeLabel(os, item); } - /// \brief Write the id of the given edge. + /// \brief Write the label of the given edge. /// - /// It writes the id of the given edge. If there was written an "id" + /// It writes the label of the given edge. If there was written an "label" /// named edge map then it will write the map value belonging to the edge. - void writeId(std::ostream& os, const Edge& item) const { - edgeset_writer.writeId(os, item); + void writeLabel(std::ostream& os, const Edge& item) const { + edgeset_writer.writeLabel(os, item); } private: @@ -327,12 +327,12 @@ /// The \c writeNodeMap() function declares a \c NodeMap writing /// command in the \c UndirGraphWriter. You should give as parameter /// the name of the map and the map object. The NodeMap writing - /// command with name "id" should write a unique map because it - /// is regarded as ID map. + /// command with name "label" should write a unique map because it + /// is regarded as label map. /// /// \code - /// IdMap nodeIdMap; - /// writer.writeNodeMap("id", nodeIdMap); + /// IdMap nodeLabelMap; + /// writer.writeNodeMap("label", nodeLabelMap); /// /// writer.writeNodeMap("coords", coords); /// writer.writeNodeMap("color", colorMap); @@ -561,29 +561,29 @@ writer->run(); } - /// \brief Write the id of the given node. + /// \brief Write the label of the given node. /// - /// It writes the id of the given node. If there was written an "id" + /// It writes the label of the given node. If there was written an "label" /// named node map then it will write the map value belonging to the node. - void writeId(std::ostream& os, const Node& item) const { - nodeset_writer.writeId(os, item); + void writeLabel(std::ostream& os, const Node& item) const { + nodeset_writer.writeLabel(os, item); } - /// \brief Write the id of the given edge. + /// \brief Write the label of the given edge. /// - /// It writes the id of the given edge. If there was written an "id" + /// It writes the label of the given edge. If there was written an "label" /// named edge map then it will write the map value belonging to the edge. - void writeId(std::ostream& os, const Edge& item) const { - undir_edgeset_writer.writeId(os, item); + void writeLabel(std::ostream& os, const Edge& item) const { + undir_edgeset_writer.writeLabel(os, item); } - /// \brief Write the id of the given undirected edge. + /// \brief Write the label of the given undirected edge. /// - /// It writes the id of the given undirected edge. If there was written - /// an "id" named edge map then it will write the map value belonging to + /// It writes the label of the given undirected edge. If there was written + /// an "label" named edge map then it will write the map value belonging to /// the edge. - void writeId(std::ostream& os, const UndirEdge& item) const { - undir_edgeset_writer.writeId(os, item); + void writeLabel(std::ostream& os, const UndirEdge& item) const { + undir_edgeset_writer.writeLabel(os, item); } diff -r b16ca599472f -r 723b2b81d900 lemon/lemon_reader.h --- a/lemon/lemon_reader.h Thu Jan 19 16:56:39 2006 +0000 +++ b/lemon/lemon_reader.h Tue Jan 24 16:07:38 2006 +0000 @@ -47,7 +47,7 @@ template bool operator<(T, T) { - throw DataFormatError("Id is not comparable"); + throw DataFormatError("Label is not comparable"); } template @@ -58,22 +58,22 @@ }; template - class ItemIdReader { + class ItemLabelReader { public: - bool isIdReader() { return true; } + bool isLabelReader() { return true; } - void readId(std::istream&, Item&) {} + void readLabel(std::istream&, Item&) {} - template + template struct Constraints { void constraints() { - bool b = reader.isIdReader(); + bool b = reader.isLabelReader(); ignore_unused_variable_warning(b); Item item; - reader.readId(is, item); + reader.readLabel(is, item); } - _ItemIdReader& reader; + _ItemLabelReader& reader; std::istream& is; }; @@ -241,7 +241,7 @@ if (it == inverse.end()) { inverse.insert(std::make_pair(value, item)); } else { - throw DataFormatError("Multiple ID occurence"); + throw DataFormatError("Multiple label occurence"); } } @@ -252,7 +252,7 @@ if (it != inverse.end()) { return it->second; } else { - throw DataFormatError("Invalid ID error"); + throw DataFormatError("Invalid label error"); } } }; @@ -279,7 +279,7 @@ if (it == inverse.end()) { inverse.insert(std::make_pair(value, item)); } else { - throw DataFormatError("Multiple ID occurence error"); + throw DataFormatError("Multiple label occurence error"); } } @@ -290,7 +290,7 @@ if (it != inverse.end()) { return it->second; } else { - throw DataFormatError("Invalid ID error"); + throw DataFormatError("Invalid label error"); } } @@ -370,33 +370,33 @@ }; template - class IdReaderBase { + class LabelReaderBase { public: typedef _Item Item; - virtual ~IdReaderBase() {} + virtual ~LabelReaderBase() {} virtual Item read(std::istream& is) const = 0; - virtual bool isIdReader() const = 0; + virtual bool isLabelReader() const = 0; }; - template - class IdReader : public IdReaderBase<_Item> { + template + class LabelReader : public LabelReaderBase<_Item> { public: typedef _Item Item; - typedef _BoxedIdReader BoxedIdReader; + typedef _BoxedLabelReader BoxedLabelReader; - const BoxedIdReader& boxedIdReader; + const BoxedLabelReader& boxedLabelReader; - IdReader(const BoxedIdReader& _boxedIdReader) - : boxedIdReader(_boxedIdReader) {} + LabelReader(const BoxedLabelReader& _boxedLabelReader) + : boxedLabelReader(_boxedLabelReader) {} virtual Item read(std::istream& is) const { Item item; - boxedIdReader.readId(is, item); + boxedLabelReader.readLabel(is, item); return item; } - virtual bool isIdReader() const { - return boxedIdReader.isIdReader(); + virtual bool isLabelReader() const { + return boxedLabelReader.isLabelReader(); } }; @@ -727,16 +727,16 @@ /// \brief SectionReader for reading a graph's nodeset. /// /// The lemon format can store multiple graph nodesets with several maps. - /// The nodeset section's header line is \c \@nodeset \c nodeset_id, but the - /// \c nodeset_id may be empty. + /// The nodeset section's header line is \c \@nodeset \c nodeset_name, but the + /// \c nodeset_name may be empty. /// /// The first line of the section contains the names of the maps separated /// with white spaces. Each next lines describes a node in the nodeset, and /// contains the mapped values for each map. /// - /// If the nodeset contains an \c "id" named map then it will be regarded + /// If the nodeset contains an \c "label" named map then it will be regarded /// as id map. This map should contain only unique values and when the - /// \c readId() member will read a value from the given stream it will + /// \c readLabel() member will read a value from the given stream it will /// give back that node which is mapped to this value. /// /// \relates LemonReader @@ -755,12 +755,12 @@ /// Constructor for NodeSetReader. It creates the NodeSetReader and /// attach it into the given LemonReader. The nodeset reader will /// add the readed nodes to the given Graph. The reader will read - /// the section when the \c section_id and the \c _id are the same. + /// the section when the \c section_name and the \c _name are the same. NodeSetReader(LemonReader& _reader, Graph& _graph, - const std::string& _id = std::string(), + const std::string& _name = std::string(), const DefaultSkipper& _skipper = DefaultSkipper()) - : Parent(_reader), graph(_graph), id(_id), skipper(_skipper) {} + : Parent(_reader), graph(_graph), name(_name), skipper(_skipper) {} /// \brief Destructor. @@ -855,11 +855,11 @@ /// the section with the given header line. /// /// It gives back true when the header line starts with \c \@nodeset, - /// and the header line's id and the nodeset's id are the same. + /// and the header line's name and the nodeset's name are the same. virtual bool header(const std::string& line) { std::istringstream ls(line); std::string command; - std::string name; + std::string id; ls >> command >> name; return command == "@nodeset" && name == id; } @@ -872,7 +872,8 @@ std::string line; getline(is, line); - std::istringstream ls(line); + std::istringstream ls(line); + std::string id; while (ls >> id) { typename MapReaders::iterator it = readers.find(id); if (it != readers.end()) { @@ -881,7 +882,7 @@ } else { index.push_back(&skipper); } - if (id == "id" && inverter.get() == 0) { + if (id == "label" || (id =="id" && inverter.get() == 0)) { inverter.reset(index.back()->getInverter()); index.back() = inverter.get(); } @@ -905,19 +906,19 @@ public: - /// \brief Returns true if the nodeset can give back the node by its id. + /// \brief Returns true if the nodeset can give back the node by its label. /// - /// Returns true if the nodeset can give back the node by its id. - /// It is possible only if an "id" named map was read. - bool isIdReader() const { + /// Returns true if the nodeset can give back the node by its label. + /// It is possible only if an "label" named map was read. + bool isLabelReader() const { return inverter.get() != 0; } - /// \brief Gives back the node by its id. + /// \brief Gives back the node by its label. /// /// It reads an id from the stream and gives back which node belongs to - /// it. It is possible only if there was read an "id" named map. - void readId(std::istream& is, Node& node) const { + /// it. It is possible only if there was read an "label" named map. + void readLabel(std::istream& is, Node& node) const { node = inverter->read(is); } @@ -927,7 +928,7 @@ MapReaders readers; Graph& graph; - std::string id; + std::string name; _reader_bits::SkipReader skipper; std::auto_ptr<_reader_bits::MapInverterBase > inverter; @@ -937,21 +938,21 @@ /// \brief SectionReader for reading a graph's edgeset. /// /// The lemon format can store multiple graph edgesets with several maps. - /// The edgeset section's header line is \c \@edgeset \c edgeset_id, but the - /// \c edgeset_id may be empty. + /// The edgeset section's header line is \c \@edgeset \c edgeset_name, but the + /// \c edgeset_name may be empty. /// /// The first line of the section contains the names of the maps separated /// with white spaces. Each next lines describes an edge in the edgeset. The /// line contains the source and the target nodes' id and the mapped /// values for each map. /// - /// If the edgeset contains an \c "id" named map then it will be regarded + /// If the edgeset contains an \c "label" named map then it will be regarded /// as id map. This map should contain only unique values and when the - /// \c readId() member will read a value from the given stream it will + /// \c readLabel() member will read a value from the given stream it will /// give back that edge which is mapped to this value. /// /// The edgeset reader needs a node id reader to identify which nodes - /// have to be connected. If a NodeSetReader reads an "id" named map, + /// have to be connected. If a NodeSetReader reads an "label" named map, /// it will be able to resolve the nodes by ids. /// /// \relates LemonReader @@ -972,18 +973,18 @@ /// attach it into the given LemonReader. The edgeset reader will /// add the readed edges to the given Graph. It will use the given /// node id reader to read the source and target nodes of the edges. - /// The reader will read the section only if the \c _id and the - /// \c edgset_id are the same. - template + /// The reader will read the section only if the \c _name and the + /// \c edgset_name are the same. + template EdgeSetReader(LemonReader& _reader, Graph& _graph, - const NodeIdReader& _nodeIdReader, - const std::string& _id = std::string(), + const NodeLabelReader& _nodeLabelReader, + const std::string& _name = std::string(), const DefaultSkipper& _skipper = DefaultSkipper()) - : Parent(_reader), graph(_graph), id(_id), skipper(_skipper) { - checkConcept<_reader_bits::ItemIdReader, NodeIdReader>(); - nodeIdReader.reset(new _reader_bits:: - IdReader(_nodeIdReader)); + : Parent(_reader), graph(_graph), name(_name), skipper(_skipper) { + checkConcept<_reader_bits::ItemLabelReader, NodeLabelReader>(); + nodeLabelReader.reset(new _reader_bits:: + LabelReader(_nodeLabelReader)); } /// \brief Destructor. /// @@ -1077,11 +1078,11 @@ /// the section with the given header line. /// /// It gives back true when the header line starts with \c \@edgeset, - /// and the header line's id and the edgeset's id are the same. + /// and the header line's name and the edgeset's name are the same. virtual bool header(const std::string& line) { std::istringstream ls(line); std::string command; - std::string name; + std::string id; ls >> command >> name; return command == "@edgeset" && name == id; } @@ -1090,14 +1091,15 @@ /// /// It reads the content of the section. virtual void read(std::istream& is) { - if (!nodeIdReader->isIdReader()) { - throw DataFormatError("Cannot find nodeset or ID map"); + if (!nodeLabelReader->isLabelReader()) { + throw DataFormatError("Cannot find nodeset or label map"); } std::vector<_reader_bits::MapReaderBase* > index; std::string line; getline(is, line); std::istringstream ls(line); + std::string id; while (ls >> id) { typename MapReaders::iterator it = readers.find(id); if (it != readers.end()) { @@ -1106,7 +1108,7 @@ } else { index.push_back(&skipper); } - if (id == "id" && inverter.get() == 0) { + if (id == "label" || (id =="id" && inverter.get() == 0)) { inverter.reset(index.back()->getInverter()); index.back() = inverter.get(); } @@ -1121,8 +1123,8 @@ } while (getline(is, line)) { std::istringstream ls(line); - Node from = nodeIdReader->read(ls); - Node to = nodeIdReader->read(ls); + Node from = nodeLabelReader->read(ls); + Node to = nodeLabelReader->read(ls); Edge edge = graph.addEdge(from, to); for (int i = 0; i < (int)index.size(); ++i) { index[i]->read(ls, edge); @@ -1132,19 +1134,19 @@ public: - /// \brief Returns true if the edgeset can give back the edge by its id. + /// \brief Returns true if the edgeset can give back the edge by its label. /// - /// Returns true if the edgeset can give back the edge by its id. - /// It is possible only if an "id" named map was read. - bool isIdReader() const { + /// Returns true if the edgeset can give back the edge by its label. + /// It is possible only if an "label" named map was read. + bool isLabelReader() const { return inverter.get() != 0; } - /// \brief Gives back the edge by its id. + /// \brief Gives back the edge by its label. /// /// It reads an id from the stream and gives back which edge belongs to - /// it. It is possible only if there was read an "id" named map. - void readId(std::istream& is, Edge& edge) const { + /// it. It is possible only if there was read an "label" named map. + void readLabel(std::istream& is, Edge& edge) const { edge = inverter->read(is); } @@ -1154,11 +1156,11 @@ MapReaders readers; Graph& graph; - std::string id; + std::string name; _reader_bits::SkipReader skipper; std::auto_ptr<_reader_bits::MapInverterBase > inverter; - std::auto_ptr<_reader_bits::IdReaderBase > nodeIdReader; + std::auto_ptr<_reader_bits::LabelReaderBase > nodeLabelReader; }; /// \ingroup io_group @@ -1166,7 +1168,7 @@ /// /// The lemon format can store multiple undirected edgesets with several /// maps. The undirected edgeset section's header line is \c \@undiredgeset - /// \c undiredgeset_id, but the \c undiredgeset_id may be empty. + /// \c undiredgeset_name, but the \c undiredgeset_name may be empty. /// /// The first line of the section contains the names of the maps separated /// with white spaces. Each next lines describes an edge in the edgeset. The @@ -1178,13 +1180,13 @@ /// is near the same just with a prefix \c '+' or \c '-' character /// difference. /// - /// If the edgeset contains an \c "id" named map then it will be regarded + /// If the edgeset contains an \c "label" named map then it will be regarded /// as id map. This map should contain only unique values and when the - /// \c readId() member will read a value from the given stream it will + /// \c readLabel() member will read a value from the given stream it will /// give back that undiricted edge which is mapped to this value. /// /// The undirected edgeset reader needs a node id reader to identify which - /// nodes have to be connected. If a NodeSetReader reads an "id" named map, + /// nodes have to be connected. If a NodeSetReader reads an "label" named map, /// it will be able to resolve the nodes by ids. /// /// \relates LemonReader @@ -1207,17 +1209,17 @@ /// reader will add the readed undirected edges to the given Graph. It /// will use the given node id reader to read the source and target /// nodes of the edges. The reader will read the section only if the - /// \c _id and the \c undiredgset_id are the same. - template + /// \c _name and the \c undiredgset_name are the same. + template UndirEdgeSetReader(LemonReader& _reader, Graph& _graph, - const NodeIdReader& _nodeIdReader, - const std::string& _id = std::string(), + const NodeLabelReader& _nodeLabelReader, + const std::string& _name = std::string(), const DefaultSkipper& _skipper = DefaultSkipper()) - : Parent(_reader), graph(_graph), id(_id), skipper(_skipper) { - checkConcept<_reader_bits::ItemIdReader, NodeIdReader>(); - nodeIdReader.reset(new _reader_bits:: - IdReader(_nodeIdReader)); + : Parent(_reader), graph(_graph), name(_name), skipper(_skipper) { + checkConcept<_reader_bits::ItemLabelReader, NodeLabelReader>(); + nodeLabelReader.reset(new _reader_bits:: + LabelReader(_nodeLabelReader)); } /// \brief Destructor. /// @@ -1372,11 +1374,11 @@ /// the section with the given header line. /// /// It gives back true when the header line starts with \c \@undiredgeset, - /// and the header line's id and the edgeset's id are the same. + /// and the header line's name and the edgeset's name are the same. virtual bool header(const std::string& line) { std::istringstream ls(line); std::string command; - std::string name; + std::string id; ls >> command >> name; return command == "@undiredgeset" && name == id; } @@ -1385,14 +1387,15 @@ /// /// It reads the content of the section. virtual void read(std::istream& is) { - if (!nodeIdReader->isIdReader()) { - throw DataFormatError("Cannot find nodeset or ID map"); + if (!nodeLabelReader->isLabelReader()) { + throw DataFormatError("Cannot find nodeset or label map"); } std::vector<_reader_bits::MapReaderBase* > index; std::string line; getline(is, line); std::istringstream ls(line); + std::string id; while (ls >> id) { typename MapReaders::iterator it = readers.find(id); if (it != readers.end()) { @@ -1401,7 +1404,7 @@ } else { index.push_back(&skipper); } - if (id == "id" && inverter.get() == 0) { + if (id == "label" || (id =="id" && inverter.get() == 0)) { inverter.reset(index.back()->getInverter()); index.back() = inverter.get(); } @@ -1416,8 +1419,8 @@ } while (getline(is, line)) { std::istringstream ls(line); - Node from = nodeIdReader->read(ls); - Node to = nodeIdReader->read(ls); + Node from = nodeLabelReader->read(ls); + Node to = nodeLabelReader->read(ls); UndirEdge edge = graph.addEdge(from, to); for (int i = 0; i < (int)index.size(); ++i) { index[i]->read(ls, edge); @@ -1427,29 +1430,29 @@ public: - /// \brief Returns true if the edgeset can give back the edge by its id. + /// \brief Returns true if the edgeset can give back the edge by its label. /// /// Returns true if the edgeset can give back the undirected edge by its - /// id. It is possible only if an "id" named map was read. - bool isIdReader() const { + /// id. It is possible only if an "label" named map was read. + bool isLabelReader() const { return inverter.get() != 0; } - /// \brief Gives back the undirected edge by its id. + /// \brief Gives back the undirected edge by its label. /// /// It reads an id from the stream and gives back which undirected edge - /// belongs to it. It is possible only if there was read an "id" named map. - void readId(std::istream& is, UndirEdge& undirEdge) const { + /// belongs to it. It is possible only if there was read an "label" named map. + void readLabel(std::istream& is, UndirEdge& undirEdge) const { undirEdge = inverter->read(is); } - /// \brief Gives back the directed edge by its id. + /// \brief Gives back the directed edge by its label. /// /// It reads an id from the stream and gives back which directed edge /// belongs to it. The directed edge id is the \c '+' or \c '-' character /// and the undirected edge id. It is possible only if there was read - /// an "id" named map. - void readId(std::istream& is, Edge& edge) const { + /// an "label" named map. + void readLabel(std::istream& is, Edge& edge) const { char c; is >> c; UndirEdge undirEdge = inverter->read(is); @@ -1470,18 +1473,18 @@ MapReaders readers; Graph& graph; - std::string id; + std::string name; _reader_bits::SkipReader skipper; std::auto_ptr<_reader_bits::MapInverterBase > inverter; - std::auto_ptr<_reader_bits::IdReaderBase > nodeIdReader; + std::auto_ptr<_reader_bits::LabelReaderBase > nodeLabelReader; }; /// \ingroup io_group /// \brief SectionReader for reading labeled nodes. /// - /// The nodes section's header line is \c \@nodes \c nodes_id, but the - /// \c nodes_id may be empty. + /// The nodes section's header line is \c \@nodes \c nodes_name, but the + /// \c nodes_name may be empty. /// /// Each line in the section contains the name of the node /// and then the node id. @@ -1499,14 +1502,14 @@ /// Constructor for NodeReader. It creates the NodeReader and /// attach it into the given LemonReader. It will use the given /// node id reader to give back the nodes. The reader will read the - /// section only if the \c _id and the \c nodes_id are the same. - template - NodeReader(LemonReader& _reader, const _IdReader& _idReader, - const std::string& _id = std::string()) - : Parent(_reader), id(_id) { - checkConcept<_reader_bits::ItemIdReader, _IdReader>(); - nodeIdReader.reset(new _reader_bits:: - IdReader(_idReader)); + /// section only if the \c _name and the \c nodes_name are the same. + template + NodeReader(LemonReader& _reader, const _LabelReader& _labelReader, + const std::string& _name = std::string()) + : Parent(_reader), name(_name) { + checkConcept<_reader_bits::ItemLabelReader, _LabelReader>(); + nodeLabelReader.reset(new _reader_bits:: + LabelReader(_labelReader)); } /// \brief Destructor. @@ -1538,11 +1541,11 @@ /// the section with the given header line. /// /// It gives back true when the header line start with \c \@nodes, - /// and the header line's id and the reader's id are the same. + /// and the header line's name and the reader's name are the same. virtual bool header(const std::string& line) { std::istringstream ls(line); std::string command; - std::string name; + std::string id; ls >> command >> name; return command == "@nodes" && name == id; } @@ -1551,8 +1554,8 @@ /// /// It reads the content of the section. virtual void read(std::istream& is) { - if (!nodeIdReader->isIdReader()) { - throw DataFormatError("Cannot find nodeset or ID map"); + if (!nodeLabelReader->isLabelReader()) { + throw DataFormatError("Cannot find nodeset or label map"); } std::string line; while (getline(is, line)) { @@ -1561,7 +1564,7 @@ ls >> id; typename NodeReaders::iterator it = readers.find(id); if (it != readers.end()) { - it->second.read(nodeIdReader->read(ls)); + it->second.read(nodeLabelReader->read(ls)); it->second.touch(); } } @@ -1577,18 +1580,18 @@ private: - std::string id; + std::string name; typedef std::map > NodeReaders; NodeReaders readers; - std::auto_ptr<_reader_bits::IdReaderBase > nodeIdReader; + std::auto_ptr<_reader_bits::LabelReaderBase > nodeLabelReader; }; /// \ingroup io_group /// \brief SectionReader for reading labeled edges. /// - /// The edges section's header line is \c \@edges \c edges_id, but the - /// \c edges_id may be empty. + /// The edges section's header line is \c \@edges \c edges_name, but the + /// \c edges_name may be empty. /// /// Each line in the section contains the name of the edge /// and then the edge id. @@ -1606,14 +1609,14 @@ /// Constructor for EdgeReader. It creates the EdgeReader and /// attach it into the given LemonReader. It will use the given /// edge id reader to give back the edges. The reader will read the - /// section only if the \c _id and the \c edges_id are the same. - template - EdgeReader(LemonReader& _reader, const _IdReader& _idReader, - const std::string& _id = std::string()) - : Parent(_reader), id(_id) { - checkConcept<_reader_bits::ItemIdReader, _IdReader>(); - edgeIdReader.reset(new _reader_bits:: - IdReader(_idReader)); + /// section only if the \c _name and the \c edges_name are the same. + template + EdgeReader(LemonReader& _reader, const _LabelReader& _labelReader, + const std::string& _name = std::string()) + : Parent(_reader), name(_name) { + checkConcept<_reader_bits::ItemLabelReader, _LabelReader>(); + edgeLabelReader.reset(new _reader_bits:: + LabelReader(_labelReader)); } /// \brief Destructor. @@ -1644,11 +1647,11 @@ /// the section with the given header line. /// /// It gives back true when the header line start with \c \@edges, - /// and the header line's id and the reader's id are the same. + /// and the header line's name and the reader's name are the same. virtual bool header(const std::string& line) { std::istringstream ls(line); std::string command; - std::string name; + std::string id; ls >> command >> name; return command == "@edges" && name == id; } @@ -1657,8 +1660,8 @@ /// /// It reads the content of the section. virtual void read(std::istream& is) { - if (!edgeIdReader->isIdReader()) { - throw DataFormatError("Cannot find edgeset or ID map"); + if (!edgeLabelReader->isLabelReader()) { + throw DataFormatError("Cannot find edgeset or label map"); } std::string line; while (getline(is, line)) { @@ -1667,7 +1670,7 @@ ls >> id; typename EdgeReaders::iterator it = readers.find(id); if (it != readers.end()) { - it->second.read(edgeIdReader->read(ls)); + it->second.read(edgeLabelReader->read(ls)); it->second.touch(); } } @@ -1683,18 +1686,18 @@ private: - std::string id; + std::string name; typedef std::map > EdgeReaders; EdgeReaders readers; - std::auto_ptr<_reader_bits::IdReaderBase > edgeIdReader; + std::auto_ptr<_reader_bits::LabelReaderBase > edgeLabelReader; }; /// \ingroup io_group /// \brief SectionReader for reading labeled undirected edges. /// /// The undirected edges section's header line is \c \@undiredges - /// \c undiredges_id, but the \c undiredges_id may be empty. + /// \c undiredges_name, but the \c undiredges_name may be empty. /// /// Each line in the section contains the name of the undirected edge /// and then the undirected edge id. @@ -1713,18 +1716,18 @@ /// Constructor for UndirEdgeReader. It creates the UndirEdgeReader and /// attach it into the given LemonReader. It will use the given /// undirected edge id reader to give back the edges. The reader will - /// read the section only if the \c _id and the \c undiredges_id are + /// read the section only if the \c _name and the \c undiredges_name are /// the same. - template - UndirEdgeReader(LemonReader& _reader, const _IdReader& _idReader, - const std::string& _id = std::string()) - : Parent(_reader), id(_id) { - checkConcept<_reader_bits::ItemIdReader, _IdReader>(); - checkConcept<_reader_bits::ItemIdReader, _IdReader>(); - undirEdgeIdReader.reset(new _reader_bits:: - IdReader(_idReader)); - edgeIdReader.reset(new _reader_bits:: - IdReader(_idReader)); + template + UndirEdgeReader(LemonReader& _reader, const _LabelReader& _labelReader, + const std::string& _name = std::string()) + : Parent(_reader), name(_name) { + checkConcept<_reader_bits::ItemLabelReader, _LabelReader>(); + checkConcept<_reader_bits::ItemLabelReader, _LabelReader>(); + undirEdgeLabelReader.reset(new _reader_bits:: + LabelReader(_labelReader)); + edgeLabelReader.reset(new _reader_bits:: + LabelReader(_labelReader)); } /// \brief Destructor. @@ -1768,11 +1771,11 @@ /// the section with the given header line. /// /// It gives back true when the header line start with \c \@edges, - /// and the header line's id and the reader's id are the same. + /// and the header line's name and the reader's name are the same. virtual bool header(const std::string& line) { std::istringstream ls(line); std::string command; - std::string name; + std::string id; ls >> command >> name; return command == "@undiredges" && name == id; } @@ -1781,11 +1784,11 @@ /// /// It reads the content of the section. virtual void read(std::istream& is) { - if (!edgeIdReader->isIdReader()) { - throw DataFormatError("Cannot find undirected edgeset or ID map"); + if (!edgeLabelReader->isLabelReader()) { + throw DataFormatError("Cannot find undirected edgeset or label map"); } - if (!undirEdgeIdReader->isIdReader()) { - throw DataFormatError("Cannot find undirected edgeset or ID map"); + if (!undirEdgeLabelReader->isLabelReader()) { + throw DataFormatError("Cannot find undirected edgeset or label map"); } std::string line; while (getline(is, line)) { @@ -1795,14 +1798,14 @@ { typename UndirEdgeReaders::iterator it = undirEdgeReaders.find(id); if (it != undirEdgeReaders.end()) { - it->second.read(undirEdgeIdReader->read(ls)); + it->second.read(undirEdgeLabelReader->read(ls)); it->second.touch(); continue; } } { typename EdgeReaders::iterator it = edgeReaders.find(id); if (it != edgeReaders.end()) { - it->second.read(edgeIdReader->read(ls)); + it->second.read(edgeLabelReader->read(ls)); it->second.touch(); continue; } @@ -1828,24 +1831,24 @@ private: - std::string id; + std::string name; typedef std::map > UndirEdgeReaders; UndirEdgeReaders undirEdgeReaders; - std::auto_ptr<_reader_bits::IdReaderBase > undirEdgeIdReader; + std::auto_ptr<_reader_bits::LabelReaderBase > undirEdgeLabelReader; typedef std::map > EdgeReaders; EdgeReaders edgeReaders; - std::auto_ptr<_reader_bits::IdReaderBase > edgeIdReader; + std::auto_ptr<_reader_bits::LabelReaderBase > edgeLabelReader; }; /// \ingroup io_group /// \brief SectionReader for attributes. /// /// The lemon format can store multiple attribute set. Each set has - /// the header line \c \@attributes \c attributeset_id, but the - /// attributeset_id may be empty. + /// the header line \c \@attributes \c attributeset_name, but the + /// attributeset_name may be empty. /// /// The attributeset section contains several lines. Each of them starts /// with an attribute and then a the value for the id. @@ -1860,10 +1863,10 @@ /// /// Constructor for AttributeReader. It creates the AttributeReader and /// attach it into the given LemonReader. The reader process a section - /// only if the \c section_id and the \c _id are the same. + /// only if the \c section_name and the \c _name are the same. AttributeReader(LemonReader& _reader, - const std::string& _id = std::string()) - : Parent(_reader), id(_id) {} + const std::string& _name = std::string()) + : Parent(_reader), name(_name) {} /// \brief Destructor. /// @@ -1916,7 +1919,7 @@ bool header(const std::string& line) { std::istringstream ls(line); std::string command; - std::string name; + std::string id; ls >> command >> name; return command == "@attributes" && name == id; } @@ -1933,7 +1936,7 @@ typename Readers::iterator it = readers.find(id); if (it != readers.end()) { it->second->read(ls); - it->second->touch(); + it->second->touch(); } } for (typename Readers::iterator it = readers.begin(); @@ -1947,7 +1950,7 @@ } private: - std::string id; + std::string name; typedef std::map Readers; Readers readers; @@ -2203,21 +2206,21 @@ private: void readMapNames(std::istream& is, std::vector& maps) { - std::string line, id; + std::string line, name; std::getline(is, line); std::istringstream ls(line); - while (ls >> id) { - maps.push_back(id); + while (ls >> name) { + maps.push_back(name); } while (getline(is, line)); } void readItemNames(std::istream& is, std::vector& maps) { - std::string line, id; + std::string line, name; while (std::getline(is, line)) { std::istringstream ls(line); - ls >> id; - maps.push_back(id); + ls >> name; + maps.push_back(name); } } diff -r b16ca599472f -r 723b2b81d900 lemon/lemon_writer.h --- a/lemon/lemon_writer.h Thu Jan 19 16:56:39 2006 +0000 +++ b/lemon/lemon_writer.h Tue Jan 24 16:07:38 2006 +0000 @@ -46,21 +46,21 @@ namespace _writer_bits { template - class ItemIdWriter { + class ItemLabelWriter { public: - bool isIdWriter() { return true; } + bool isLabelWriter() { return true; } - void writeId(std::ostream&, const Item&) {} + void writeLabel(std::ostream&, const Item&) {} - template + template struct Constraints { void constraints() { - bool b = writer.isIdWriter(); + bool b = writer.isLabelWriter(); ignore_unused_variable_warning(b); - writer.writeId(os, item); + writer.writeLabel(os, item); } - _ItemIdWriter& writer; + _ItemLabelWriter& writer; std::ostream& os; const Item& item; }; @@ -225,31 +225,31 @@ template - class IdWriterBase { + class LabelWriterBase { public: typedef _Item Item; - virtual ~IdWriterBase() {} + virtual ~LabelWriterBase() {} virtual void write(std::ostream&, const Item&) const = 0; - virtual bool isIdWriter() const = 0; + virtual bool isLabelWriter() const = 0; }; - template - class IdWriter : public IdWriterBase<_Item> { + template + class LabelWriter : public LabelWriterBase<_Item> { public: typedef _Item Item; - typedef _BoxedIdWriter BoxedIdWriter; + typedef _BoxedLabelWriter BoxedLabelWriter; - const BoxedIdWriter& idWriter; + const BoxedLabelWriter& labelWriter; - IdWriter(const BoxedIdWriter& _idWriter) - : idWriter(_idWriter) {} + LabelWriter(const BoxedLabelWriter& _labelWriter) + : labelWriter(_labelWriter) {} virtual void write(std::ostream& os, const Item& item) const { - idWriter.writeId(os, item); + labelWriter.writeLabel(os, item); } - virtual bool isIdWriter() const { - return idWriter.isIdWriter(); + virtual bool isLabelWriter() const { + return labelWriter.isLabelWriter(); } }; @@ -374,18 +374,18 @@ /// \brief SectionWriter for writing a graph's nodeset. /// /// The lemon format can store multiple graph nodesets with several maps. - /// The nodeset section's header line is \c \@nodeset \c nodeset_id, but the - /// \c nodeset_id may be empty. + /// The nodeset section's header line is \c \@nodeset \c nodeset_name, but + /// the \c nodeset_name may be empty. /// /// The first line of the section contains the names of the maps separated /// with white spaces. Each next lines describes a node in the nodeset, and /// contains the mapped values for each map. /// - /// If the nodeset contains an \c "id" named map then it will be regarded - /// as id map. This map should contain only unique values and when the - /// \c writeId() member will be called with a node it will write it's id. - /// Otherwise if the \c _forceIdMap constructor parameter is true then - /// the id map will be the id in the graph. + /// If the nodeset contains an \c "label" named map then it will be regarded + /// as label map. This map should contain only unique values and when the + /// \c writeLabel() member will be called with a node it will write it's + /// label. Otherwise if the \c _forceLabelMap constructor parameter is true + /// then the label map will be the id in the graph. /// /// \relates LemonWriter template @@ -400,14 +400,14 @@ /// \brief Constructor. /// /// Constructor for NodeSetWriter. It creates the NodeSetWriter and - /// attach it into the given LemonWriter. If the \c _forceIdMap - /// parameter is true then the writer will write own id map when - /// the user does not give "id" named map. + /// attach it into the given LemonWriter. If the \c _forceLabelMap + /// parameter is true then the writer will write own label map when + /// the user does not give "label" named map. NodeSetWriter(LemonWriter& _writer, const Graph& _graph, - const std::string& _id = std::string(), - bool _forceIdMap = true) - : Parent(_writer), idMap(0), forceIdMap(_forceIdMap), - graph(_graph), id(_id) {} + const std::string& _name = std::string(), + bool _forceLabelMap = true) + : Parent(_writer), labelMap(0), forceLabelMap(_forceLabelMap), + graph(_graph), name(_name) {} /// \brief Destructor. /// @@ -454,7 +454,7 @@ /// /// It gives back the header of the section. virtual std::string header() { - return "@nodeset " + id; + return "@nodeset " + name; } /// \brief Writer function of the section. @@ -462,21 +462,21 @@ /// Write the content of the section. virtual void write(std::ostream& os) { for (int i = 0; i < (int)writers.size(); ++i) { - if (writers[i].first == "id") { - idMap = writers[i].second; - forceIdMap = false; + if (writers[i].first == "label" || (writers[i].first == "id" && labelMap == 0)) { + labelMap = writers[i].second; + forceLabelMap = false; break; } } - if (forceIdMap) { - os << "id\t"; + if (forceLabelMap) { + os << "label\t"; } for (int i = 0; i < (int)writers.size(); ++i) { os << writers[i].first << '\t'; } os << std::endl; for (typename Graph::NodeIt it(graph); it != INVALID; ++it) { - if (forceIdMap) { + if (forceLabelMap) { os << graph.id(it) << '\t'; } for (int i = 0; i < (int)writers.size(); ++i) { @@ -489,26 +489,26 @@ public: - /// \brief Returns true if the nodeset can write the ids of the nodes. + /// \brief Returns true if the nodeset can write the labels of the nodes. /// - /// Returns true if the nodeset can write the ids of the nodes. - /// It is possible only if an "id" named map was written or the - /// \c _forceIdMap constructor parameter was true. - bool isIdWriter() const { - return idMap != 0 || forceIdMap; + /// Returns true if the nodeset can write the labels of the nodes. + /// It is possible only if an "label" named map was written or the + /// \c _forceLabelMap constructor parameter was true. + bool isLabelWriter() const { + return labelMap != 0 || forceLabelMap; } - /// \brief Write the id of the given node. + /// \brief Write the label of the given node. /// - /// It writes the id of the given node. If there was written an "id" + /// It writes the label of the given node. If there was written an "label" /// named map then it will write the map value belongs to the node. - /// Otherwise if the \c forceId parameter was true it will write - /// its id in the graph. - void writeId(std::ostream& os, const Node& item) const { - if (forceIdMap) { + /// Otherwise if the \c forceLabel parameter was true it will write + /// its label in the graph. + void writeLabel(std::ostream& os, const Node& item) const { + if (forceLabelMap) { os << graph.id(item); } else { - idMap->write(os, item); + labelMap->write(os, item); } } @@ -518,11 +518,11 @@ MapWriterBase*> > MapWriters; MapWriters writers; - _writer_bits::MapWriterBase* idMap; - bool forceIdMap; + _writer_bits::MapWriterBase* labelMap; + bool forceLabelMap; const Graph& graph; - std::string id; + std::string name; }; @@ -530,22 +530,22 @@ /// \brief SectionWriter for writing a graph's edgesets. /// /// The lemon format can store multiple graph edgesets with several maps. - /// The edgeset section's header line is \c \@edgeset \c edgeset_id, but the - /// \c edgeset_id may be empty. + /// The edgeset section's header line is \c \@edgeset \c edgeset_name, but + /// the \c edgeset_name may be empty. /// /// The first line of the section contains the names of the maps separated /// with white spaces. Each next lines describes a edge in the edgeset. The - /// line contains the source and the target nodes' id and the mapped + /// line contains the source and the target nodes' label and the mapped /// values for each map. /// - /// If the edgeset contains an \c "id" named map then it will be regarded - /// as id map. This map should contain only unique values and when the - /// \c writeId() member will be called with an edge it will write it's id. - /// Otherwise if the \c _forceIdMap constructor parameter is true then - /// the id map will be the id in the graph. + /// If the edgeset contains an \c "label" named map then it will be regarded + /// as label map. This map should contain only unique values and when the + /// \c writeLabel() member will be called with an edge it will write it's + /// label. Otherwise if the \c _forceLabelMap constructor parameter is true + /// then the label map will be the id in the graph. /// - /// The edgeset writer needs a node id writer to identify which nodes - /// have to be connected. If a NodeSetWriter can write the nodes' id, + /// The edgeset writer needs a node label writer to identify which nodes + /// have to be connected. If a NodeSetWriter can write the nodes' label, /// it will be able to use with this class. /// /// \relates LemonWriter @@ -562,20 +562,20 @@ /// \brief Constructor. /// /// Constructor for EdgeSetWriter. It creates the EdgeSetWriter and - /// attach it into the given LemonWriter. It will write node ids by - /// the \c _nodeIdWriter. If the \c _forceIdMap parameter is true - /// then the writer will write own id map if the user does not give - /// "id" named map. - template + /// attach it into the given LemonWriter. It will write node labels by + /// the \c _nodeLabelWriter. If the \c _forceLabelMap parameter is true + /// then the writer will write own label map if the user does not give + /// "label" named map. + template EdgeSetWriter(LemonWriter& _writer, const Graph& _graph, - const NodeIdWriter& _nodeIdWriter, - const std::string& _id = std::string(), - bool _forceIdMap = true) - : Parent(_writer), idMap(0), forceIdMap(_forceIdMap), - graph(_graph), id(_id) { - checkConcept<_writer_bits::ItemIdWriter, NodeIdWriter>(); - nodeIdWriter.reset(new _writer_bits:: - IdWriter(_nodeIdWriter)); + const NodeLabelWriter& _nodeLabelWriter, + const std::string& _name = std::string(), + bool _forceLabelMap = true) + : Parent(_writer), labelMap(0), forceLabelMap(_forceLabelMap), + graph(_graph), name(_name) { + checkConcept<_writer_bits::ItemLabelWriter, NodeLabelWriter>(); + nodeLabelWriter.reset(new _writer_bits:: + LabelWriter(_nodeLabelWriter)); } /// \brief Destructor. @@ -623,37 +623,37 @@ /// /// It gives back the header of the section. virtual std::string header() { - return "@edgeset " + id; + return "@edgeset " + name; } /// \brief Writer function of the section. /// /// Write the content of the section. virtual void write(std::ostream& os) { - if (!nodeIdWriter->isIdWriter()) { - throw DataFormatError("Cannot find nodeset or ID map"); + if (!nodeLabelWriter->isLabelWriter()) { + throw DataFormatError("Cannot find nodeset or label map"); } for (int i = 0; i < (int)writers.size(); ++i) { - if (writers[i].first == "id") { - idMap = writers[i].second; - forceIdMap = false; + if (writers[i].first == "label" || (writers[i].first == "id" && labelMap == 0)) { + labelMap = writers[i].second; + forceLabelMap = false; break; } } os << "\t\t"; - if (forceIdMap) { - os << "id\t"; + if (forceLabelMap) { + os << "label\t"; } for (int i = 0; i < (int)writers.size(); ++i) { os << writers[i].first << '\t'; } os << std::endl; for (typename Graph::EdgeIt it(graph); it != INVALID; ++it) { - nodeIdWriter->write(os, graph.source(it)); + nodeLabelWriter->write(os, graph.source(it)); os << '\t'; - nodeIdWriter->write(os, graph.target(it)); + nodeLabelWriter->write(os, graph.target(it)); os << '\t'; - if (forceIdMap) { + if (forceLabelMap) { os << graph.id(it) << '\t'; } for (int i = 0; i < (int)writers.size(); ++i) { @@ -666,26 +666,26 @@ public: - /// \brief Returns true if the edgeset can write the ids of the edges. + /// \brief Returns true if the edgeset can write the labels of the edges. /// - /// Returns true if the edgeset can write the ids of the edges. - /// It is possible only if an "id" named map was written or the - /// \c _forceIdMap constructor parameter was true. - bool isIdWriter() const { - return forceIdMap || idMap != 0; + /// Returns true if the edgeset can write the labels of the edges. + /// It is possible only if an "label" named map was written or the + /// \c _forceLabelMap constructor parameter was true. + bool isLabelWriter() const { + return forceLabelMap || labelMap != 0; } - /// \brief Write the id of the given edge. + /// \brief Write the label of the given edge. /// - /// It writes the id of the given edge. If there was written an "id" + /// It writes the label of the given edge. If there was written an "label" /// named map then it will write the map value belongs to the edge. - /// Otherwise if the \c forceId parameter was true it will write - /// its id in the graph. - void writeId(std::ostream& os, const Edge& item) const { - if (forceIdMap) { + /// Otherwise if the \c forceLabel parameter was true it will write + /// its label in the graph. + void writeLabel(std::ostream& os, const Edge& item) const { + if (forceLabelMap) { os << graph.id(item); } else { - idMap->write(os, item); + labelMap->write(os, item); } } @@ -695,13 +695,13 @@ MapWriterBase*> > MapWriters; MapWriters writers; - _writer_bits::MapWriterBase* idMap; - bool forceIdMap; + _writer_bits::MapWriterBase* labelMap; + bool forceLabelMap; const Graph& graph; - std::string id; + std::string name; - std::auto_ptr<_writer_bits::IdWriterBase > nodeIdWriter; + std::auto_ptr<_writer_bits::LabelWriterBase > nodeLabelWriter; }; /// \ingroup io_group @@ -709,11 +709,11 @@ /// /// The lemon format can store multiple undirected edgesets with several /// maps. The undirected edgeset section's header line is \c \@undiredgeset - /// \c undiredgeset_id, but the \c undiredgeset_id may be empty. + /// \c undiredgeset_name, but the \c undiredgeset_name may be empty. /// /// The first line of the section contains the names of the maps separated /// with white spaces. Each next lines describes an undirected edge in the - /// edgeset. The line contains the two connected nodes' id and the mapped + /// edgeset. The line contains the two connected nodes' label and the mapped /// values for each undirected map. /// /// The section can handle the directed as a syntactical sugar. Two @@ -722,15 +722,15 @@ /// is near the same just with a prefix \c '+' or \c '-' character /// difference. /// - /// If the edgeset contains an \c "id" named map then it will be regarded - /// as id map. This map should contain only unique values and when the - /// \c writeId() member will be called with an undirected edge it will - /// write it's id. Otherwise if the \c _forceIdMap constructor parameter - /// is true then the id map will be the id in the graph. + /// If the edgeset contains an \c "label" named map then it will be regarded + /// as label map. This map should contain only unique values and when the + /// \c writeLabel() member will be called with an undirected edge it will + /// write it's label. Otherwise if the \c _forceLabelMap constructor + /// parameter is true then the label map will be the id in the graph. /// - /// The undirected edgeset writer needs a node id writer to identify + /// The undirected edgeset writer needs a node label writer to identify /// which nodes have to be connected. If a NodeSetWriter can write the - /// nodes' id, it will be able to use with this class. + /// nodes' label, it will be able to use with this class. /// /// \relates LemonWriter template @@ -747,20 +747,20 @@ /// \brief Constructor. /// /// Constructor for UndirEdgeSetWriter. It creates the UndirEdgeSetWriter - /// and attach it into the given LemonWriter. It will write node ids by - /// the \c _nodeIdWriter. If the \c _forceIdMap parameter is true - /// then the writer will write own id map if the user does not give - /// "id" named map. - template + /// and attach it into the given LemonWriter. It will write node labels by + /// the \c _nodeLabelWriter. If the \c _forceLabelMap parameter is true + /// then the writer will write own label map if the user does not give + /// "label" named map. + template UndirEdgeSetWriter(LemonWriter& _writer, const Graph& _graph, - const NodeIdWriter& _nodeIdWriter, - const std::string& _id = std::string(), - bool _forceIdMap = true) - : Parent(_writer), idMap(0), forceIdMap(_forceIdMap), - graph(_graph), id(_id) { - checkConcept<_writer_bits::ItemIdWriter, NodeIdWriter>(); - nodeIdWriter.reset(new _writer_bits:: - IdWriter(_nodeIdWriter)); + const NodeLabelWriter& _nodeLabelWriter, + const std::string& _name = std::string(), + bool _forceLabelMap = true) + : Parent(_writer), labelMap(0), forceLabelMap(_forceLabelMap), + graph(_graph), name(_name) { + checkConcept<_writer_bits::ItemLabelWriter, NodeLabelWriter>(); + nodeLabelWriter.reset(new _writer_bits:: + LabelWriter(_nodeLabelWriter)); } /// \brief Destructor. @@ -832,37 +832,37 @@ /// /// It gives back the header of the section. virtual std::string header() { - return "@undiredgeset " + id; + return "@undiredgeset " + name; } /// \brief Writer function of the section. /// /// Write the content of the section. virtual void write(std::ostream& os) { - if (!nodeIdWriter->isIdWriter()) { - throw DataFormatError("Cannot find nodeset or ID map"); + if (!nodeLabelWriter->isLabelWriter()) { + throw DataFormatError("Cannot find nodeset or label map"); } for (int i = 0; i < (int)writers.size(); ++i) { - if (writers[i].first == "id") { - idMap = writers[i].second; - forceIdMap = false; + if (writers[i].first == "label") { + labelMap = writers[i].second; + forceLabelMap = false; break; } } os << "\t\t"; - if (forceIdMap) { - os << "id\t"; + if (forceLabelMap) { + os << "label\t"; } for (int i = 0; i < (int)writers.size(); ++i) { os << writers[i].first << '\t'; } os << std::endl; for (typename Graph::UndirEdgeIt it(graph); it != INVALID; ++it) { - nodeIdWriter->write(os, graph.source(it)); + nodeLabelWriter->write(os, graph.source(it)); os << '\t'; - nodeIdWriter->write(os, graph.target(it)); + nodeLabelWriter->write(os, graph.target(it)); os << '\t'; - if (forceIdMap) { + if (forceLabelMap) { os << graph.id(it) << '\t'; } for (int i = 0; i < (int)writers.size(); ++i) { @@ -875,47 +875,47 @@ public: - /// \brief Returns true if the undirected edgeset can write the ids of + /// \brief Returns true if the undirected edgeset can write the labels of /// the edges. /// - /// Returns true if the undirected edgeset can write the ids of the - /// undirected edges. It is possible only if an "id" named map was - /// written or the \c _forceIdMap constructor parameter was true. - bool isIdWriter() const { - return forceIdMap || idMap != 0; + /// Returns true if the undirected edgeset can write the labels of the + /// undirected edges. It is possible only if an "label" named map was + /// written or the \c _forceLabelMap constructor parameter was true. + bool isLabelWriter() const { + return forceLabelMap || labelMap != 0; } - /// \brief Write the id of the given undirected edge. + /// \brief Write the label of the given undirected edge. /// - /// It writes the id of the given undirected edge. If there was written - /// an "id" named map then it will write the map value belongs to the - /// undirected edge. Otherwise if the \c forceId parameter was true it + /// It writes the label of the given undirected edge. If there was written + /// an "label" named map then it will write the map value belongs to the + /// undirected edge. Otherwise if the \c forceLabel parameter was true it /// will write its id in the graph. - void writeId(std::ostream& os, const UndirEdge& item) const { - if (forceIdMap) { + void writeLabel(std::ostream& os, const UndirEdge& item) const { + if (forceLabelMap) { os << graph.id(item); } else { - idMap->write(os, item); + labelMap->write(os, item); } } - /// \brief Write the id of the given edge. + /// \brief Write the label of the given edge. /// - /// It writes the id of the given edge. If there was written - /// an "id" named map then it will write the map value belongs to the - /// edge. Otherwise if the \c forceId parameter was true it + /// It writes the label of the given edge. If there was written + /// an "label" named map then it will write the map value belongs to the + /// edge. Otherwise if the \c forceLabel parameter was true it /// will write its id in the graph. If the edge is forward map /// then its prefix character is \c '+' elsewhere \c '-'. - void writeId(std::ostream& os, const Edge& item) const { + void writeLabel(std::ostream& os, const Edge& item) const { if (graph.direction(item)) { os << "+ "; } else { os << "- "; } - if (forceIdMap) { + if (forceLabelMap) { os << graph.id(item); } else { - idMap->write(os, item); + labelMap->write(os, item); } } @@ -925,23 +925,23 @@ MapWriterBase*> > MapWriters; MapWriters writers; - _writer_bits::MapWriterBase* idMap; - bool forceIdMap; + _writer_bits::MapWriterBase* labelMap; + bool forceLabelMap; const Graph& graph; - std::string id; + std::string name; - std::auto_ptr<_writer_bits::IdWriterBase > nodeIdWriter; + std::auto_ptr<_writer_bits::LabelWriterBase > nodeLabelWriter; }; /// \ingroup io_group - /// \brief SectionWriter for writing labeled nodes. + /// \brief SectionWriter for writing named nodes. /// - /// The nodes section's header line is \c \@nodes \c nodes_id, but the - /// \c nodes_id may be empty. + /// The nodes section's header line is \c \@nodes \c nodes_name, but the + /// \c nodes_name may be empty. /// - /// Each line in the section contains the label of the node and - /// then the node id. + /// Each line in the section contains the name of the node and + /// then the node label. /// /// \relates LemonWriter template @@ -954,14 +954,15 @@ /// \brief Constructor. /// /// Constructor for NodeWriter. It creates the NodeWriter and - /// attach it into the given LemonWriter. The given \c _IdWriter - /// will write the nodes' id what can be a nodeset writer. - template - NodeWriter(LemonWriter& _writer, const _IdWriter& _idWriter, - const std::string& _id = std::string()) - : Parent(_writer), id(_id) { - checkConcept<_writer_bits::ItemIdWriter, _IdWriter>(); - idWriter.reset(new _writer_bits::IdWriter(_idWriter)); + /// attach it into the given LemonWriter. The given \c _LabelWriter + /// will write the nodes' label what can be a nodeset writer. + template + NodeWriter(LemonWriter& _writer, const _LabelWriter& _labelWriter, + const std::string& _name = std::string()) + : Parent(_writer), name(_name) { + checkConcept<_writer_bits::ItemLabelWriter, _LabelWriter>(); + labelWriter.reset(new _writer_bits::LabelWriter + (_labelWriter)); } @@ -985,45 +986,44 @@ protected: - /// \brief Header checking function. + /// \brief The header of the section. /// - /// It gives back true when the header line start with \c \@nodes, - /// and the header line's id and the writer's id are the same. + /// It gives back the header of the section. virtual std::string header() { - return "@nodes " + id; + return "@nodes " + name; } /// \brief Writer function of the section. /// /// Write the content of the section. virtual void write(std::ostream& os) { - if (!idWriter->isIdWriter()) { - throw DataFormatError("Cannot find nodeset or ID map"); + if (!labelWriter->isLabelWriter()) { + throw DataFormatError("Cannot find nodeset or label map"); } for (int i = 0; i < (int)writers.size(); ++i) { os << writers[i].first << ' '; - idWriter->write(os, *(writers[i].second)); + labelWriter->write(os, *(writers[i].second)); os << std::endl; } } private: - std::string id; + std::string name; typedef std::vector > NodeWriters; NodeWriters writers; - std::auto_ptr<_writer_bits::IdWriterBase > idWriter; + std::auto_ptr<_writer_bits::LabelWriterBase > labelWriter; }; /// \ingroup io_group - /// \brief SectionWriter for writing labeled edges. + /// \brief SectionWriter for writing named edges. /// - /// The edges section's header line is \c \@edges \c edges_id, but the - /// \c edges_id may be empty. + /// The edges section's header line is \c \@edges \c edges_name, but the + /// \c edges_name may be empty. /// - /// Each line in the section contains the label of the edge and - /// then the edge id. + /// Each line in the section contains the name of the edge and + /// then the edge label. /// /// \relates LemonWriter template @@ -1036,14 +1036,14 @@ /// \brief Constructor. /// /// Constructor for EdgeWriter. It creates the EdgeWriter and - /// attach it into the given LemonWriter. The given \c _IdWriter - /// will write the edges' id what can be a edgeset writer. - template - EdgeWriter(LemonWriter& _writer, const _IdWriter& _idWriter, - const std::string& _id = std::string()) - : Parent(_writer), id(_id) { - checkConcept<_writer_bits::ItemIdWriter, _IdWriter>(); - idWriter.reset(new _writer_bits::IdWriter(_idWriter)); + /// attach it into the given LemonWriter. The given \c _LabelWriter + /// will write the edges' label what can be a edgeset writer. + template + EdgeWriter(LemonWriter& _writer, const _LabelWriter& _labelWriter, + const std::string& _name = std::string()) + : Parent(_writer), name(_name) { + checkConcept<_writer_bits::ItemLabelWriter, _LabelWriter>(); + labelWriter.reset(new _writer_bits::LabelWriter(_labelWriter)); } /// \brief Destructor. @@ -1065,46 +1065,45 @@ protected: - /// \brief Header checking function. + /// \brief The header of the section. /// - /// It gives back true when the header line start with \c \@edges, - /// and the header line's id and the writer's id are the same. + /// It gives back the header of the section. virtual std::string header() { - return "@edges " + id; + return "@edges " + name; } /// \brief Writer function of the section. /// /// Write the content of the section. virtual void write(std::ostream& os) { - if (!idWriter->isIdWriter()) { - throw DataFormatError("Cannot find edgeset or ID map"); + if (!labelWriter->isLabelWriter()) { + throw DataFormatError("Cannot find edgeset or label map"); } for (int i = 0; i < (int)writers.size(); ++i) { os << writers[i].first << ' '; - idWriter->write(os, *(writers[i].second)); + labelWriter->write(os, *(writers[i].second)); os << std::endl; } } private: - std::string id; + std::string name; typedef std::vector > EdgeWriters; EdgeWriters writers; - std::auto_ptr<_writer_bits::IdWriterBase > idWriter; + std::auto_ptr<_writer_bits::LabelWriterBase > labelWriter; }; /// \ingroup io_group - /// \brief SectionWriter for writing labeled undirected edges. + /// \brief SectionWriter for writing named undirected edges. /// /// The undirected edges section's header line is \c \@undiredges - /// \c undiredges_id, but the \c undiredges_id may be empty. + /// \c undiredges_name, but the \c undiredges_name may be empty. /// - /// Each line in the section contains the label of the undirected edge and - /// then the undirected edge id. + /// Each line in the section contains the name of the undirected edge and + /// then the undirected edge label. /// /// \relates LemonWriter template @@ -1119,19 +1118,19 @@ /// \brief Constructor. /// /// Constructor for UndirEdgeWriter. It creates the UndirEdgeWriter and - /// attach it into the given LemonWriter. The given \c _IdWriter - /// will write the undirected edges' id what can be an undirected + /// attach it into the given LemonWriter. The given \c _LabelWriter + /// will write the undirected edges' label what can be an undirected /// edgeset writer. - template - UndirEdgeWriter(LemonWriter& _writer, const _IdWriter& _idWriter, - const std::string& _id = std::string()) - : Parent(_writer), id(_id) { - checkConcept<_writer_bits::ItemIdWriter, _IdWriter>(); - checkConcept<_writer_bits::ItemIdWriter, _IdWriter>(); - undirEdgeIdWriter.reset(new _writer_bits:: - IdWriter(_idWriter)); - edgeIdWriter.reset(new _writer_bits:: - IdWriter(_idWriter)); + template + UndirEdgeWriter(LemonWriter& _writer, const _LabelWriter& _labelWriter, + const std::string& _name = std::string()) + : Parent(_writer), name(_name) { + checkConcept<_writer_bits::ItemLabelWriter, _LabelWriter>(); + checkConcept<_writer_bits::ItemLabelWriter, _LabelWriter>(); + undirEdgeLabelWriter.reset(new _writer_bits:: + LabelWriter(_labelWriter)); + edgeLabelWriter.reset(new _writer_bits:: + LabelWriter(_labelWriter)); } /// \brief Destructor. @@ -1160,48 +1159,47 @@ protected: - /// \brief Header checking function. + /// \brief The header of the section. /// - /// It gives back true when the header line start with \c \@undiredges, - /// and the header line's id and the writer's id are the same. + /// It gives back the header of the section. virtual std::string header() { - return "@undiredges " + id; + return "@undiredges " + name; } /// \brief Writer function of the section. /// /// Write the content of the section. virtual void write(std::ostream& os) { - if (!edgeIdWriter->isIdWriter()) { - throw DataFormatError("Cannot find undirected edgeset or ID map"); + if (!edgeLabelWriter->isLabelWriter()) { + throw DataFormatError("Cannot find undirected edgeset or label map"); } - if (!undirEdgeIdWriter->isIdWriter()) { - throw DataFormatError("Cannot find undirected edgeset or ID map"); + if (!undirEdgeLabelWriter->isLabelWriter()) { + throw DataFormatError("Cannot find undirected edgeset or label map"); } for (int i = 0; i < (int)undirEdgeWriters.size(); ++i) { os << undirEdgeWriters[i].first << ' '; - undirEdgeIdWriter->write(os, *(undirEdgeWriters[i].second)); + undirEdgeLabelWriter->write(os, *(undirEdgeWriters[i].second)); os << std::endl; } for (int i = 0; i < (int)edgeWriters.size(); ++i) { os << edgeWriters[i].first << ' '; - edgeIdWriter->write(os, *(edgeWriters[i].second)); + edgeLabelWriter->write(os, *(edgeWriters[i].second)); os << std::endl; } } private: - std::string id; + std::string name; typedef std::vector > UndirEdgeWriters; UndirEdgeWriters undirEdgeWriters; - std::auto_ptr<_writer_bits::IdWriterBase > undirEdgeIdWriter; + std::auto_ptr<_writer_bits::LabelWriterBase > undirEdgeLabelWriter; typedef std::vector > EdgeWriters; EdgeWriters edgeWriters; - std::auto_ptr<_writer_bits::IdWriterBase > edgeIdWriter; + std::auto_ptr<_writer_bits::LabelWriterBase > edgeLabelWriter; }; @@ -1209,8 +1207,8 @@ /// \brief SectionWriter for attributes. /// /// The lemon format can store multiple attribute set. Each set has - /// the header line \c \@attributes \c attributeset_id, but the - /// attributeset_id may be empty. + /// the header line \c \@attributes \c attributes_name, but the + /// attributeset_name may be empty. /// /// The attributeset section contains several lines. Each of them starts /// with the name of attribute and then the value. @@ -1226,8 +1224,8 @@ /// Constructor for AttributeWriter. It creates the AttributeWriter and /// attach it into the given LemonWriter. AttributeWriter(LemonWriter& _writer, - const std::string& _id = std::string()) - : Parent(_writer), id(_id) {} + const std::string& _name = std::string()) + : Parent(_writer), name(_name) {} /// \brief Destructor. /// @@ -1248,10 +1246,10 @@ /// /// Add an attribute writer command for the writer. template - AttributeWriter& writeAttribute(const std::string& id, + AttributeWriter& writeAttribute(const std::string& name, const Value& value) { return - writeAttribute >(id, value); + writeAttribute >(name, value); } /// \brief Add an attribute writer command for the writer. @@ -1273,7 +1271,7 @@ /// /// It gives back the header of the section. std::string header() { - return "@attributes " + id; + return "@attributes " + name; } /// \brief Writer function of the section. @@ -1289,7 +1287,7 @@ } private: - std::string id; + std::string name; typedef std::vector > Writers; diff -r b16ca599472f -r 723b2b81d900 test/Makefile.am --- a/test/Makefile.am Thu Jan 19 16:56:39 2006 +0000 +++ b/test/Makefile.am Tue Jan 24 16:07:38 2006 +0000 @@ -10,6 +10,7 @@ graph_utils_test.h \ heap_test.h + check_PROGRAMS = \ all_pairs_shortest_path_test \ bfs_test \ @@ -20,9 +21,9 @@ graph_adaptor_test \ graph_utils_test \ kruskal_test \ - max_matching_test \ maps_test \ matrix_maps_test \ + max_matching_test \ min_cost_flow_test \ suurballe_test \ path_test \ diff -r b16ca599472f -r 723b2b81d900 test/dijkstra_test.lgf --- a/test/dijkstra_test.lgf Thu Jan 19 16:56:39 2006 +0000 +++ b/test/dijkstra_test.lgf Tue Jan 24 16:07:38 2006 +0000 @@ -1,5 +1,5 @@ @nodeset -id +label 999 998 997 @@ -1001,7 +1001,7 @@ 1 0 @edgeset - id capacity + label capacity 75 377 6906 27 417 515 6905 69 603 249 6904 80