# HG changeset patch
# User Peter Kovacs <kpeter@inf.elte.hu>
# Date 1215209667 -7200
# Node ID 7bf5f97d574f0c8fa09366a59c7c588dd2820c03
# Parent  1e6af6f0843c373a0579fc699ac4a83bb4f5948a
Doc improvements in LGF related files
diff -r 1e6af6f0843c -r 7bf5f97d574f demo/lgf_demo.cc
        
              
              
                
                  | a | b |  | 
              
            
                  
                          | 34 | 34 | #include <lemon/smart_graph.h> | 
                          | 35 | 35 | #include <lemon/lgf_reader.h> | 
                          | 36 | 36 | #include <lemon/lgf_writer.h> | 
            
                  
                          | 37 |  | #include <lemon/random.h> | 
                          | 38 |  |  | 
            
                  
                          | 39 | 37 |  | 
                          | 40 | 38 | using namespace lemon; | 
                          | 41 | 39 |  | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 44 | 42 | SmartDigraph::ArcMap<int> cap(g); | 
                          | 45 | 43 | SmartDigraph::Node s, t; | 
                          | 46 | 44 |  | 
            
                      
                        | 47 |  | digraphReader("digraph.lgf", g). // read the directe ggraph into g | 
                      
                        |  | 45 | digraphReader("digraph.lgf", g). // read the directed graph into g | 
            
                  
                          | 48 | 46 | arcMap("capacity", cap).       // read the 'capacity' arc map into cap | 
                          | 49 | 47 | node("source", s).             // read 'source' node to s | 
                          | 50 | 48 | node("target", t).             // read 'target' node to t | 
                          | 51 | 49 | run(); | 
                          | 52 | 50 |  | 
            
                      
                        | 53 |  | std::cout << " Digraph read from 'digraph.lgf'" << std::endl; | 
                      
                        |  | 51 | std::cout << "A digraph is read from 'digraph.lgf'." << std::endl; | 
            
                  
                          | 54 | 52 | std::cout << "Number of nodes: " << countNodes(g) << std::endl; | 
                          | 55 | 53 | std::cout << "Number of arcs: " << countArcs(g) << std::endl; | 
                          | 56 | 54 |  | 
            
        
      
      
        
        diff -r 1e6af6f0843c -r 7bf5f97d574f doc/groups.dox
        
              
              
                
                  | a | b |  | 
              
            
                  
                          | 475 | 475 | /** | 
                          | 476 | 476 | @defgroup lemon_io Lemon Input-Output | 
                          | 477 | 477 | @ingroup io_group | 
            
                      
                        | 478 |  | \brief Reading and writing LEMON format | 
                      
                        |  | 478 | \brief Reading and writing \ref lgf-format "Lemon Graph Format". | 
            
                  
                          | 479 | 479 |  | 
            
                      
                        | 480 |  | This group describes methods for reading and writing LEMON format. | 
                        | 481 |  | You can find more about this format on the \ref graph-io-page "Graph Input-Output" | 
                        | 482 |  | tutorial pages. | 
                      
                        |  | 480 | This group describes methods for reading and writing \ref lgf-format "Lemon Graph Format". | 
            
                  
                          | 483 | 481 | */ | 
                          | 484 | 482 |  | 
                          | 485 | 483 | /** | 
            
        
      
      
        
        diff -r 1e6af6f0843c -r 7bf5f97d574f doc/lgf.dox
        
              
              
                
                  | a | b |  | 
              
            
                  
                          | 46 | 46 | contain whitespaces and escape sequences. | 
                          | 47 | 47 |  | 
                          | 48 | 48 | The \c \@nodes section describes a set of nodes and associated | 
            
                      
                        | 49 |  | maps. The first is a header line, it columns are the names of the | 
                      
                        |  | 49 | maps. The first is a header line, its columns are the names of the | 
            
                  
                          | 50 | 50 | maps appearing in the following lines. | 
                          | 51 | 51 | One of the maps must be called \c | 
                          | 52 | 52 | "label", which plays special role in the file. | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 64 | 64 | \endcode | 
                          | 65 | 65 |  | 
                          | 66 | 66 | The \c \@arcs section is very similar to the \c \@nodes section, | 
            
                      
                        | 67 |  | it again starts with a header line describing the names of the arc, | 
                      
                        |  | 67 | it again starts with a header line describing the names of the maps, | 
            
                  
                          | 68 | 68 | but the \c "label" map is not obligatory here. The following lines | 
                          | 69 | 69 | describe the arcs. The first two tokens of each line are | 
                          | 70 | 70 | the source and the target node of the arc, respectively, then come the map | 
            
        
      
      
        
        diff -r 1e6af6f0843c -r 7bf5f97d574f lemon/lgf_reader.h
        
              
              
                
                  | a | b |  | 
              
            
                  
                          | 18 | 18 |  | 
                          | 19 | 19 | ///\ingroup lemon_io | 
                          | 20 | 20 | ///\file | 
            
                      
                        | 21 |  | ///\brief Lemon Graph Formatreader. | 
                      
                        |  | 21 | ///\brief \ref lgf-format "Lemon Graph Format" reader. | 
            
                  
                          | 22 | 22 |  | 
                          | 23 | 23 |  | 
                          | 24 | 24 | #ifndef LEMON_LGF_READER_H | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 400 | 400 |  | 
                          | 401 | 401 | /// \ingroup lemon_io | 
                          | 402 | 402 | /// | 
            
                      
                        | 403 |  | /// \brief LGFreader for directed graphs | 
                      
                        |  | 403 | /// \brief \ref lgf-format "LGF" reader for directed graphs | 
            
                  
                          | 404 | 404 | /// | 
                          | 405 | 405 | /// This utility reads an \ref lgf-format "LGF" file. | 
                          | 406 | 406 | /// | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 410 | 410 | /// member function. A map reading rule can be added to the reader | 
                          | 411 | 411 | /// with the \c nodeMap() or \c arcMap() members. An optional | 
                          | 412 | 412 | /// converter parameter can also be added as a standard functor | 
            
                      
                        | 413 |  | /// converting from std::string to the value type of the map. If it | 
                      
                        |  | 413 | /// converting from \c std::string to the value type of the map. If it | 
            
                  
                          | 414 | 414 | /// is set, it will determine how the tokens in the file should be | 
            
                      
                        | 415 |  | /// is converted to the map's value type. If the functor is not set, | 
                      
                        |  | 415 | /// converted to the value type of the map. If the functor is not set, | 
            
                  
                          | 416 | 416 | /// then a default conversion will be used. One map can be read into | 
                          | 417 | 417 | /// multiple map objects at the same time. The \c attribute(), \c | 
                          | 418 | 418 | /// node() and \c arc() functions are used to add attribute reading | 
                          | 419 | 419 | /// rules. | 
                          | 420 | 420 | /// | 
                          | 421 | 421 | ///\code | 
            
                      
                        | 422 |  | ///     DigraphReader<Digraph>(std::cin, digraph). | 
                        | 423 |  | ///     nodeMap("coordinates", coord_map). | 
                        | 424 |  | ///     arcMap("capacity", cap_map). | 
                        | 425 |  | ///     node("source", src). | 
                        | 426 |  | ///     node("target", trg). | 
                        | 427 |  | ///     attribute("caption", caption). | 
                        | 428 |  | ///     run(); | 
                      
                        |  | 422 | /// DigraphReader<Digraph>(std::cin, digraph). | 
                        |  | 423 | ///   nodeMap("coordinates", coord_map). | 
                        |  | 424 | ///   arcMap("capacity", cap_map). | 
                        |  | 425 | ///   node("source", src). | 
                        |  | 426 | ///   node("target", trg). | 
                        |  | 427 | ///   attribute("caption", caption). | 
                        |  | 428 | ///   run(); | 
            
                  
                          | 429 | 429 | ///\endcode | 
                          | 430 | 430 | /// | 
                          | 431 | 431 | /// By default the reader uses the first section in the file of the | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 437 | 437 | /// that the nodes or arcs should not be constructed (added to the | 
                          | 438 | 438 | /// graph) during the reading, but instead the label map of the items | 
                          | 439 | 439 | /// are given as a parameter of these functions. An | 
            
                      
                        | 440 |  | /// application of these function is multipass reading, which is | 
                        | 441 |  | /// important if two \ e\@arcs sections must be read from the | 
                        | 442 |  | /// file. In this example the first phase would read the node set and one | 
                      
                        |  | 440 | /// application of these functions is multipass reading, which is | 
                        |  | 441 | /// important if two \c \@arcs sections must be read from the | 
                        |  | 442 | /// file. In this case the first phase would read the node set and one | 
            
                  
                          | 443 | 443 | /// of the arc sets, while the second phase would read the second arc | 
                          | 444 | 444 | /// set into an \e ArcSet class (\c SmartArcSet or \c ListArcSet). | 
                          | 445 | 445 | /// The previously read label node map should be passed to the \c | 
                          | 446 | 446 | /// useNodes() functions. Another application of multipass reading when | 
            
                      
                        | 447 |  | /// paths are given as a node map or an arc map. It is impossible read this in | 
                      
                        |  | 447 | /// paths are given as a node map or an arc map. It is impossible to read this in | 
            
                  
                          | 448 | 448 | /// a single pass, because the arcs are not constructed when the node | 
                          | 449 | 449 | /// maps are read. | 
                          | 450 | 450 | template <typename _Digraph> | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 735 | 735 | /// | 
                          | 736 | 736 | /// Use previously constructed node set, and specify the node | 
                          | 737 | 737 | /// label map and a functor which converts the label map values to | 
            
                      
                        | 738 |  | /// std::string. | 
                      
                        |  | 738 | /// \c std::string. | 
            
                  
                          | 739 | 739 | template <typename Map, typename Converter> | 
                          | 740 | 740 | DigraphReader& useNodes(const Map& map, | 
                          | 741 | 741 | const Converter& converter = Converter()) { | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 768 | 768 | /// | 
                          | 769 | 769 | /// Use previously constructed arc set, and specify the arc | 
                          | 770 | 770 | /// label map and a functor which converts the label map values to | 
            
                      
                        | 771 |  | /// std::string. | 
                      
                        |  | 771 | /// \c std::string. | 
            
                  
                          | 772 | 772 | template <typename Map, typename Converter> | 
                          | 773 | 773 | DigraphReader& useArcs(const Map& map, | 
                          | 774 | 774 | const Converter& converter = Converter()) { | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 784 | 784 | /// \brief Skips the reading of node section | 
                          | 785 | 785 | /// | 
                          | 786 | 786 | /// Omit the reading of the node section. This implies that each node | 
            
                      
                        | 787 |  | /// map reading rule will be aban oned, and the nodes of the graph | 
                      
                        |  | 787 | /// map reading rule will be abandoned, and the nodes of the graph | 
            
                  
                          | 788 | 788 | /// will not be constructed, which usually cause that the arc set | 
            
                      
                        | 789 |  | /// could not be read due to lack of node name | 
                        | 790 |  | /// resolving. Therefore, the \c skipArcs() should be used too, or | 
                        | 791 |  | /// the useNodes() member function should be used to specify the | 
                        | 792 |  | /// label of the nodes. | 
                      
                        |  | 789 | /// could not be read due to lack of node name resolving. | 
                        |  | 790 | /// Therefore \c skipArcs() function should also be used, or | 
                        |  | 791 | /// \c useNodes() should be used to specify the label of the nodes. | 
            
                  
                          | 793 | 792 | DigraphReader& skipNodes() { | 
                          | 794 | 793 | LEMON_ASSERT(!_skip_nodes, "Skip nodes already set"); | 
                          | 795 | 794 | _skip_nodes = true; | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 799 | 798 | /// \brief Skips the reading of arc section | 
                          | 800 | 799 | /// | 
                          | 801 | 800 | /// Omit the reading of the arc section. This implies that each arc | 
            
                      
                        | 802 |  | /// map reading rule will be aban oned, and the arcs of the graph | 
                      
                        |  | 801 | /// map reading rule will be abandoned, and the arcs of the graph | 
            
                  
                          | 803 | 802 | /// will not be constructed. | 
                          | 804 | 803 | DigraphReader& skipArcs() { | 
                          | 805 | 804 | LEMON_ASSERT(!_skip_arcs, "Skip arcs already set"); | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1175 | 1174 |  | 
                          | 1176 | 1175 | }; | 
                          | 1177 | 1176 |  | 
            
                  
                          |  | 1177 | /// \brief Return a \ref DigraphReader class | 
                          |  | 1178 | /// | 
                          |  | 1179 | /// This function just returns a \ref DigraphReader class. | 
            
                  
                          | 1178 | 1180 | /// \relates DigraphReader | 
                          | 1179 | 1181 | template <typename Digraph> | 
                          | 1180 | 1182 | DigraphReader<Digraph> digraphReader(std::istream& is, Digraph& digraph) { | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1182 | 1184 | return tmp; | 
                          | 1183 | 1185 | } | 
                          | 1184 | 1186 |  | 
            
                  
                          |  | 1187 | /// \brief Return a \ref DigraphReader class | 
                          |  | 1188 | /// | 
                          |  | 1189 | /// This function just returns a \ref DigraphReader class. | 
            
                  
                          | 1185 | 1190 | /// \relates DigraphReader | 
                          | 1186 | 1191 | template <typename Digraph> | 
                          | 1187 | 1192 | DigraphReader<Digraph> digraphReader(const std::string& fn, | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1190 | 1195 | return tmp; | 
                          | 1191 | 1196 | } | 
                          | 1192 | 1197 |  | 
            
                  
                          |  | 1198 | /// \brief Return a \ref DigraphReader class | 
                          |  | 1199 | /// | 
                          |  | 1200 | /// This function just returns a \ref DigraphReader class. | 
            
                  
                          | 1193 | 1201 | /// \relates DigraphReader | 
                          | 1194 | 1202 | template <typename Digraph> | 
                          | 1195 | 1203 | DigraphReader<Digraph> digraphReader(const char* fn, Digraph& digraph) { | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1211 | 1219 |  | 
                          | 1212 | 1220 | /// \ingroup lemon_io | 
                          | 1213 | 1221 | /// | 
            
                      
                        | 1214 |  | /// \brief LGFreader for undirected graphs | 
                      
                        |  | 1222 | /// \brief \ref lgf-format "LGF" reader for undirected graphs | 
            
                  
                          | 1215 | 1223 | /// | 
                          | 1216 | 1224 | /// This utility reads an \ref lgf-format "LGF" file. | 
            
                  
                          |  | 1225 | /// | 
                          |  | 1226 | /// It can be used almost the same way as \c DigraphReader. | 
                          |  | 1227 | /// The only difference is that this class can handle edges and | 
                          |  | 1228 | /// edge maps as well as arcs and arc maps. | 
            
                  
                          | 1217 | 1229 | template <typename _Graph> | 
                          | 1218 | 1230 | class GraphReader { | 
                          | 1219 | 1231 | public: | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1262 | 1274 |  | 
                          | 1263 | 1275 | /// \brief Constructor | 
                          | 1264 | 1276 | /// | 
            
                      
                        | 1265 |  | /// Construct a undirected graph reader, which reads from the given | 
                      
                        |  | 1277 | /// Construct an undirected graph reader, which reads from the given | 
            
                  
                          | 1266 | 1278 | /// input stream. | 
                          | 1267 | 1279 | GraphReader(std::istream& is, Graph& graph) | 
                          | 1268 | 1280 | : _is(&is), local_is(false), _graph(graph), | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1271 | 1283 |  | 
                          | 1272 | 1284 | /// \brief Constructor | 
                          | 1273 | 1285 | /// | 
            
                      
                        | 1274 |  | /// Construct a undirected graph reader, which reads from the given | 
                      
                        |  | 1286 | /// Construct an undirected graph reader, which reads from the given | 
            
                  
                          | 1275 | 1287 | /// file. | 
                          | 1276 | 1288 | GraphReader(const std::string& fn, Graph& graph) | 
                          | 1277 | 1289 | : _is(new std::ifstream(fn.c_str())), local_is(true), _graph(graph), | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1280 | 1292 |  | 
                          | 1281 | 1293 | /// \brief Constructor | 
                          | 1282 | 1294 | /// | 
            
                      
                        | 1283 |  | /// Construct a undirected graph reader, which reads from the given | 
                      
                        |  | 1295 | /// Construct an undirected graph reader, which reads from the given | 
            
                  
                          | 1284 | 1296 | /// file. | 
                          | 1285 | 1297 | GraphReader(const char* fn, Graph& graph) | 
                          | 1286 | 1298 | : _is(new std::ifstream(fn)), local_is(true), _graph(graph), | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1497 | 1509 |  | 
                          | 1498 | 1510 | /// \brief Set \c \@nodes section to be read | 
                          | 1499 | 1511 | /// | 
            
                      
                        | 1500 |  | /// Set \c \@nodes section to be read  | 
                      
                        |  | 1512 | /// Set \c \@nodes section to be read. | 
            
                  
                          | 1501 | 1513 | GraphReader& nodes(const std::string& caption) { | 
                          | 1502 | 1514 | _nodes_caption = caption; | 
                          | 1503 | 1515 | return *this; | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1505 | 1517 |  | 
                          | 1506 | 1518 | /// \brief Set \c \@edges section to be read | 
                          | 1507 | 1519 | /// | 
            
                      
                        | 1508 |  | /// Set \c \@edges section to be read  | 
                      
                        |  | 1520 | /// Set \c \@edges section to be read. | 
            
                  
                          | 1509 | 1521 | GraphReader& edges(const std::string& caption) { | 
                          | 1510 | 1522 | _edges_caption = caption; | 
                          | 1511 | 1523 | return *this; | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1513 | 1525 |  | 
                          | 1514 | 1526 | /// \brief Set \c \@attributes section to be read | 
                          | 1515 | 1527 | /// | 
            
                      
                        | 1516 |  | /// Set \c \@attributes section to be read  | 
                      
                        |  | 1528 | /// Set \c \@attributes section to be read. | 
            
                  
                          | 1517 | 1529 | GraphReader& attributes(const std::string& caption) { | 
                          | 1518 | 1530 | _attributes_caption = caption; | 
                          | 1519 | 1531 | return *this; | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1544 | 1556 | /// | 
                          | 1545 | 1557 | /// Use previously constructed node set, and specify the node | 
                          | 1546 | 1558 | /// label map and a functor which converts the label map values to | 
            
                      
                        | 1547 |  | /// std::string. | 
                      
                        |  | 1559 | /// \c std::string. | 
            
                  
                          | 1548 | 1560 | template <typename Map, typename Converter> | 
                          | 1549 | 1561 | GraphReader& useNodes(const Map& map, | 
                          | 1550 | 1562 | const Converter& converter = Converter()) { | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1577 | 1589 | /// | 
                          | 1578 | 1590 | /// Use previously constructed edge set, and specify the edge | 
                          | 1579 | 1591 | /// label map and a functor which converts the label map values to | 
            
                      
                        | 1580 |  | /// std::string. | 
                      
                        |  | 1592 | /// \c std::string. | 
            
                  
                          | 1581 | 1593 | template <typename Map, typename Converter> | 
                          | 1582 | 1594 | GraphReader& useEdges(const Map& map, | 
                          | 1583 | 1595 | const Converter& converter = Converter()) { | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1590 | 1602 | return *this; | 
                          | 1591 | 1603 | } | 
                          | 1592 | 1604 |  | 
            
                      
                        | 1593 |  | /// \brief Skip sthe reading of node section | 
                      
                        |  | 1605 | /// \brief Skip the reading of node section | 
            
                  
                          | 1594 | 1606 | /// | 
                          | 1595 | 1607 | /// Omit the reading of the node section. This implies that each node | 
            
                      
                        | 1596 |  | /// map reading rule will be aban oned, and the nodes of the graph | 
                      
                        |  | 1608 | /// map reading rule will be abandoned, and the nodes of the graph | 
            
                  
                          | 1597 | 1609 | /// will not be constructed, which usually cause that the edge set | 
                          | 1598 | 1610 | /// could not be read due to lack of node name | 
            
                      
                        | 1599 |  | /// resolving. Therefore, the \c skipEdges() should be used too, or | 
                        | 1600 |  | /// the useNodes() member function should be used to specify the | 
                        | 1601 |  | /// label of the nodes. | 
                      
                        |  | 1611 | /// could not be read due to lack of node name resolving. | 
                        |  | 1612 | /// Therefore \c skipEdges() function should also be used, or | 
                        |  | 1613 | /// \c useNodes() should be used to specify the label of the nodes. | 
            
                  
                          | 1602 | 1614 | GraphReader& skipNodes() { | 
                          | 1603 | 1615 | LEMON_ASSERT(!_skip_nodes, "Skip nodes already set"); | 
                          | 1604 | 1616 | _skip_nodes = true; | 
                          | 1605 | 1617 | return *this; | 
                          | 1606 | 1618 | } | 
                          | 1607 | 1619 |  | 
            
                      
                        | 1608 |  | /// \brief Skip sthe reading of edge section | 
                      
                        |  | 1620 | /// \brief Skip the reading of edge section | 
            
                  
                          | 1609 | 1621 | /// | 
                          | 1610 | 1622 | /// Omit the reading of the edge section. This implies that each edge | 
            
                      
                        | 1611 |  | /// map reading rule will be aban oned, and the edges of the graph | 
                      
                        |  | 1623 | /// map reading rule will be abandoned, and the edges of the graph | 
            
                  
                          | 1612 | 1624 | /// will not be constructed. | 
                          | 1613 | 1625 | GraphReader& skipEdges() { | 
                          | 1614 | 1626 | LEMON_ASSERT(!_skip_edges, "Skip edges already set"); | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1982 | 1994 |  | 
                          | 1983 | 1995 | }; | 
                          | 1984 | 1996 |  | 
            
                  
                          |  | 1997 | /// \brief Return a \ref GraphReader class | 
                          |  | 1998 | /// | 
                          |  | 1999 | /// This function just returns a \ref GraphReader class. | 
            
                  
                          | 1985 | 2000 | /// \relates GraphReader | 
                          | 1986 | 2001 | template <typename Graph> | 
                          | 1987 | 2002 | GraphReader<Graph> graphReader(std::istream& is, Graph& graph) { | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1989 | 2004 | return tmp; | 
                          | 1990 | 2005 | } | 
                          | 1991 | 2006 |  | 
            
                  
                          |  | 2007 | /// \brief Return a \ref GraphReader class | 
                          |  | 2008 | /// | 
                          |  | 2009 | /// This function just returns a \ref GraphReader class. | 
            
                  
                          | 1992 | 2010 | /// \relates GraphReader | 
                          | 1993 | 2011 | template <typename Graph> | 
                          | 1994 | 2012 | GraphReader<Graph> graphReader(const std::string& fn, | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1997 | 2015 | return tmp; | 
                          | 1998 | 2016 | } | 
                          | 1999 | 2017 |  | 
            
                  
                          |  | 2018 | /// \brief Return a \ref GraphReader class | 
                          |  | 2019 | /// | 
                          |  | 2020 | /// This function just returns a \ref GraphReader class. | 
            
                  
                          | 2000 | 2021 | /// \relates GraphReader | 
                          | 2001 | 2022 | template <typename Graph> | 
                          | 2002 | 2023 | GraphReader<Graph> graphReader(const char* fn, Graph& graph) { | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 2010 | 2031 | SectionReader sectionReader(const std::string& fn); | 
                          | 2011 | 2032 | SectionReader sectionReader(const char* fn); | 
                          | 2012 | 2033 |  | 
            
                  
                          |  | 2034 | /// \ingroup lemon_io | 
                          |  | 2035 | /// | 
            
                  
                          | 2013 | 2036 | /// \brief Section reader class | 
                          | 2014 | 2037 | /// | 
            
                      
                        | 2015 |  | /// In the \ e LGF file extra sections can be placed, which contain | 
                        | 2016 |  | /// any data in arbitrary format. Such sections can be read with | 
                        | 2017 |  | /// this class. A reading rule can be added with two different | 
                        | 2018 |  | /// functions, with the \c sectionLines() function a functor can | 
                        | 2019 |  | /// process the section line-by-line. While with the \c | 
                      
                        |  | 2038 | /// In the \ref lgf-format "LGF" file extra sections can be placed, | 
                        |  | 2039 | /// which contain any data in arbitrary format. Such sections can be | 
                        |  | 2040 | /// read with this class. A reading rule can be added to the class | 
                        |  | 2041 | /// with two different functions. With the \c sectionLines() function a | 
                        |  | 2042 | /// functor can process the section line-by-line, while with the \c | 
            
                  
                          | 2020 | 2043 | /// sectionStream() member the section can be read from an input | 
                          | 2021 | 2044 | /// stream. | 
                          | 2022 | 2045 | class SectionReader { | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 2105 | 2128 | ///  23 6 | 
                          | 2106 | 2129 | ///\endcode | 
                          | 2107 | 2130 | /// | 
            
                      
                        | 2108 |  | /// The functor is implemented as a nstruct: | 
                      
                        |  | 2131 | /// The functor is implemented as a struct: | 
            
                  
                          | 2109 | 2132 | ///\code | 
                          | 2110 | 2133 | ///  struct NumberSection { | 
                          | 2111 | 2134 | ///    std::vector<int>& _data; | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 2123 | 2146 | ///\endcode | 
                          | 2124 | 2147 | template <typename Functor> | 
                          | 2125 | 2148 | SectionReader& sectionLines(const std::string& type, Functor functor) { | 
            
                      
                        | 2126 |  | LEMON_ASSERT(!type.empty(), "Type is not empty."); | 
                      
                        |  | 2149 | LEMON_ASSERT(!type.empty(), "Type is empty."); | 
            
                  
                          | 2127 | 2150 | LEMON_ASSERT(_sections.find(type) == _sections.end(), | 
                          | 2128 | 2151 | "Multiple reading of section."); | 
                          | 2129 | 2152 | _sections.insert(std::make_pair(type, | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 2135 | 2158 | /// \brief Add a section processor with stream oriented reading | 
                          | 2136 | 2159 | /// | 
                          | 2137 | 2160 | /// The first parameter is the type of the section, the second is | 
            
                      
                        | 2138 |  | /// a functor, which takes an \c std::istream& and an int& | 
                      
                        |  | 2161 | /// a functor, which takes an \c std::istream& and an \c int& | 
            
                  
                          | 2139 | 2162 | /// parameter, the latter regard to the line number of stream. The | 
                          | 2140 | 2163 | /// functor can read the input while the section go on, and the | 
                          | 2141 | 2164 | /// line number should be modified accordingly. | 
                          | 2142 | 2165 | template <typename Functor> | 
                          | 2143 | 2166 | SectionReader& sectionStream(const std::string& type, Functor functor) { | 
            
                      
                        | 2144 |  | LEMON_ASSERT(!type.empty(), "Type is not empty."); | 
                      
                        |  | 2167 | LEMON_ASSERT(!type.empty(), "Type is empty."); | 
            
                  
                          | 2145 | 2168 | LEMON_ASSERT(_sections.find(type) == _sections.end(), | 
                          | 2146 | 2169 | "Multiple reading of section."); | 
                          | 2147 | 2170 | _sections.insert(std::make_pair(type, | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 2186 | 2209 |  | 
                          | 2187 | 2210 | /// \brief Start the batch processing | 
                          | 2188 | 2211 | /// | 
            
                      
                        | 2189 |  | /// This function starts the batch processing  | 
                      
                        |  | 2212 | /// This function starts the batch processing. | 
            
                  
                          | 2190 | 2213 | void run() { | 
                          | 2191 | 2214 |  | 
                          | 2192 | 2215 | LEMON_ASSERT(_is != 0, "This reader assigned to an other reader"); | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 2239 | 2262 |  | 
                          | 2240 | 2263 | }; | 
                          | 2241 | 2264 |  | 
            
                  
                          |  | 2265 | /// \brief Return a \ref SectionReader class | 
                          |  | 2266 | /// | 
                          |  | 2267 | /// This function just returns a \ref SectionReader class. | 
            
                  
                          | 2242 | 2268 | /// \relates SectionReader | 
                          | 2243 | 2269 | inline SectionReader sectionReader(std::istream& is) { | 
                          | 2244 | 2270 | SectionReader tmp(is); | 
                          | 2245 | 2271 | return tmp; | 
                          | 2246 | 2272 | } | 
                          | 2247 | 2273 |  | 
            
                  
                          |  | 2274 | /// \brief Return a \ref SectionReader class | 
                          |  | 2275 | /// | 
                          |  | 2276 | /// This function just returns a \ref SectionReader class. | 
            
                  
                          | 2248 | 2277 | /// \relates SectionReader | 
                          | 2249 | 2278 | inline SectionReader sectionReader(const std::string& fn) { | 
                          | 2250 | 2279 | SectionReader tmp(fn); | 
                          | 2251 | 2280 | return tmp; | 
                          | 2252 | 2281 | } | 
                          | 2253 | 2282 |  | 
            
                  
                          |  | 2283 | /// \brief Return a \ref SectionReader class | 
                          |  | 2284 | /// | 
                          |  | 2285 | /// This function just returns a \ref SectionReader class. | 
            
                  
                          | 2254 | 2286 | /// \relates SectionReader | 
                          | 2255 | 2287 | inline SectionReader sectionReader(const char* fn) { | 
                          | 2256 | 2288 | SectionReader tmp(fn); | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 2269 | 2301 | /// reads the graph and stores the appropriate information for | 
                          | 2270 | 2302 | /// reading the graph. | 
                          | 2271 | 2303 | /// | 
            
                      
                        | 2272 |  | ///\code LgfContents contents("graph.lgf"); | 
                      
                        |  | 2304 | ///\code | 
                        |  | 2305 | /// LgfContents contents("graph.lgf"); | 
            
                  
                          | 2273 | 2306 | /// contents.run(); | 
                          | 2274 | 2307 | /// | 
            
                      
                        | 2275 |  | /// // does it contain any node section and arc section | 
                      
                        |  | 2308 | /// // Does it contain any node section and arc section? | 
            
                  
                          | 2276 | 2309 | /// if (contents.nodeSectionNum() == 0 || contents.arcSectionNum()) { | 
            
                      
                        | 2277 |  | ///   std::cerr << "Failure, cannot find graph " << std::endl; | 
                      
                        |  | 2310 | ///   std::cerr << "Failure, cannot find graph." << std::endl; | 
            
                  
                          | 2278 | 2311 | ///   return -1; | 
                          | 2279 | 2312 | /// } | 
            
                      
                        | 2280 |  | /// std::cout << "The name of the default node section  : " | 
                      
                        |  | 2313 | /// std::cout << "The name of the default node section: " | 
            
                  
                          | 2281 | 2314 | ///           << contents.nodeSection(0) << std::endl; | 
            
                      
                        | 2282 |  | /// std::cout << "The number of the arc maps  : " | 
                      
                        |  | 2315 | /// std::cout << "The number of the arc maps: " | 
            
                  
                          | 2283 | 2316 | ///           << contents.arcMaps(0).size() << std::endl; | 
            
                      
                        | 2284 |  | /// std::cout << "The name of second arc map  : " | 
                      
                        |  | 2317 | /// std::cout << "The name of second arc map: " | 
            
                  
                          | 2285 | 2318 | ///           << contents.arcMaps(0)[1] << std::endl; | 
                          | 2286 | 2319 | ///\endcode | 
                          | 2287 | 2320 | class LgfContents { | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 2352 | 2385 | return _node_sections.size(); | 
                          | 2353 | 2386 | } | 
                          | 2354 | 2387 |  | 
            
                      
                        | 2355 |  | /// \brief Returns the section name at the given position. | 
                      
                        |  | 2388 | /// \brief Returns the node section name at the given position. | 
            
                  
                          | 2356 | 2389 | /// | 
            
                      
                        | 2357 |  | /// Returns the section name at the given position. | 
                      
                        |  | 2390 | /// Returns the node section name at the given position. | 
            
                  
                          | 2358 | 2391 | const std::string& nodeSection(int i) const { | 
                          | 2359 | 2392 | return _node_sections[i]; | 
                          | 2360 | 2393 | } | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 2379 | 2412 | return _edge_sections.size(); | 
                          | 2380 | 2413 | } | 
                          | 2381 | 2414 |  | 
            
                      
                        | 2382 |  | /// \brief Returns the section name at the given position. | 
                      
                        |  | 2415 | /// \brief Returns the arc/edge section name at the given position. | 
            
                  
                          | 2383 | 2416 | /// | 
            
                      
                        | 2384 |  | /// Returns the section name at the given position. | 
                      
                        |  | 2417 | /// Returns the arc/edge section name at the given position. | 
            
                  
                          | 2385 | 2418 | /// \note It is synonym of \c edgeSection(). | 
                          | 2386 | 2419 | const std::string& arcSection(int i) const { | 
                          | 2387 | 2420 | return _edge_sections[i]; | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 2436 | 2469 | return _attribute_sections.size(); | 
                          | 2437 | 2470 | } | 
                          | 2438 | 2471 |  | 
            
                      
                        | 2439 |  | /// \brief Returns the section name at the given position. | 
                      
                        |  | 2472 | /// \brief Returns the attribute section name at the given position. | 
            
                  
                          | 2440 | 2473 | /// | 
            
                      
                        | 2441 |  | /// Returns the section name at the given position. | 
                      
                        |  | 2474 | /// Returns the attribute section name at the given position. | 
            
                  
                          | 2442 | 2475 | const std::string& attributeSectionNames(int i) const { | 
                          | 2443 | 2476 | return _attribute_sections[i]; | 
                          | 2444 | 2477 | } | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 2529 | 2562 | /// \name Execution of the contents reader | 
                          | 2530 | 2563 | /// @{ | 
                          | 2531 | 2564 |  | 
            
                      
                        | 2532 |  | /// \brief Start the reading | 
                      
                        |  | 2565 | /// \brief Starts the reading | 
            
                  
                          | 2533 | 2566 | /// | 
            
                      
                        | 2534 |  | /// This function starts the reading  | 
                      
                        |  | 2567 | /// This function starts the reading. | 
            
                  
                          | 2535 | 2568 | void run() { | 
                          | 2536 | 2569 |  | 
                          | 2537 | 2570 | readLine(); | 
            
        
      
      
        
        diff -r 1e6af6f0843c -r 7bf5f97d574f lemon/lgf_writer.h
        
              
              
                
                  | a | b |  | 
              
            
                  
                          | 18 | 18 |  | 
                          | 19 | 19 | ///\ingroup lemon_io | 
                          | 20 | 20 | ///\file | 
            
                      
                        | 21 |  | ///\brief Lemon Graph Formatwriter. | 
                      
                        |  | 21 | ///\brief \ref lgf-format "Lemon Graph Format" writer. | 
            
                  
                          | 22 | 22 |  | 
                          | 23 | 23 |  | 
                          | 24 | 24 | #ifndef LEMON_LGF_WRITER_H | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 322 | 322 |  | 
                          | 323 | 323 | /// \ingroup lemon_io | 
                          | 324 | 324 | /// | 
            
                      
                        | 325 |  | /// \brief LGFwriter for directed graphs | 
                      
                        |  | 325 | /// \brief \ref lgf-format "LGF" writer for directed graphs | 
            
                  
                          | 326 | 326 | /// | 
                          | 327 | 327 | /// This utility writes an \ref lgf-format "LGF" file. | 
                          | 328 | 328 | /// | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 332 | 332 | /// member function. A map writing rule can be added to the writer | 
                          | 333 | 333 | /// with the \c nodeMap() or \c arcMap() members. An optional | 
                          | 334 | 334 | /// converter parameter can also be added as a standard functor | 
            
                      
                        | 335 |  | /// converting from the value type of the map to std::string. If it | 
                        | 336 |  | /// is set, it will determine how the map's value typeis written to | 
                      
                        |  | 335 | /// converting from the value type of the map to \c std::string. If it | 
                        |  | 336 | /// is set, it will determine how the value type of the map is written to | 
            
                  
                          | 337 | 337 | /// the output stream. If the functor is not set, then a default | 
                          | 338 | 338 | /// conversion will be used. The \c attribute(), \c node() and \c | 
                          | 339 | 339 | /// arc() functions are used to add attribute writing rules. | 
                          | 340 | 340 | /// | 
                          | 341 | 341 | ///\code | 
            
                      
                        | 342 |  | ///     DigraphWriter<Digraph>(std::cout, digraph). | 
                        | 343 |  | ///     nodeMap("coordinates", coord_map). | 
                        | 344 |  | ///     nodeMap("size", size). | 
                        | 345 |  | ///     nodeMap("title", title). | 
                        | 346 |  | ///     arcMap("capacity", cap_map). | 
                        | 347 |  | ///     node("source", src). | 
                        | 348 |  | ///     node("target", trg). | 
                        | 349 |  | ///     attribute("caption", caption). | 
                        | 350 |  | ///     run(); | 
                      
                        |  | 342 | /// DigraphWriter<Digraph>(std::cout, digraph). | 
                        |  | 343 | ///   nodeMap("coordinates", coord_map). | 
                        |  | 344 | ///   nodeMap("size", size). | 
                        |  | 345 | ///   nodeMap("title", title). | 
                        |  | 346 | ///   arcMap("capacity", cap_map). | 
                        |  | 347 | ///   node("source", src). | 
                        |  | 348 | ///   node("target", trg). | 
                        |  | 349 | ///   attribute("caption", caption). | 
                        |  | 350 | ///   run(); | 
            
                  
                          | 351 | 351 | ///\endcode | 
                          | 352 | 352 | /// | 
                          | 353 | 353 | /// | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 486 | 486 | /// \name Writing rules | 
                          | 487 | 487 | /// @{ | 
                          | 488 | 488 |  | 
            
                      
                        | 489 |  | /// \brief Node map reading rule | 
                      
                        |  | 489 | /// \brief Node map writing rule | 
            
                  
                          | 490 | 490 | /// | 
            
                      
                        | 491 |  | /// Add a node map reading rule to the writer. | 
                      
                        |  | 491 | /// Add a node map writing rule to the writer. | 
            
                  
                          | 492 | 492 | template <typename Map> | 
                          | 493 | 493 | DigraphWriter& nodeMap(const std::string& caption, const Map& map) { | 
                          | 494 | 494 | checkConcept<concepts::ReadMap<Node, typename Map::Value>, Map>(); | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 586 | 586 | return *this; | 
                          | 587 | 587 | } | 
                          | 588 | 588 |  | 
            
                      
                        | 589 |  | /// \name Se lect section by name | 
                      
                        |  | 589 | /// \name Section captions | 
            
                  
                          | 590 | 590 | /// @{ | 
                          | 591 | 591 |  | 
            
                      
                        | 592 |  | /// \brief Set \c \@nodes section to be read | 
                      
                        |  | 592 | /// \brief Add an additional caption to the \c \@nodes section | 
            
                  
                          | 593 | 593 | /// | 
            
                      
                        | 594 |  | /// Set \c \@nodes section to be read | 
                      
                        |  | 594 | /// Add an additional caption to the \c \@nodes section. | 
            
                  
                          | 595 | 595 | DigraphWriter& nodes(const std::string& caption) { | 
                          | 596 | 596 | _nodes_caption = caption; | 
                          | 597 | 597 | return *this; | 
                          | 598 | 598 | } | 
                          | 599 | 599 |  | 
            
                      
                        | 600 |  | /// \brief Set \c \@arcs section to be read | 
                      
                        |  | 600 | /// \brief Add an additional caption to the \c \@arcs section | 
            
                  
                          | 601 | 601 | /// | 
            
                      
                        | 602 |  | /// Set \c \@arcs section to be read | 
                      
                        |  | 602 | /// Add an additional caption to the \c \@arcs section. | 
            
                  
                          | 603 | 603 | DigraphWriter& arcs(const std::string& caption) { | 
                          | 604 | 604 | _arcs_caption = caption; | 
                          | 605 | 605 | return *this; | 
                          | 606 | 606 | } | 
                          | 607 | 607 |  | 
            
                      
                        | 608 |  | /// \brief Set \c \@attributes section to be read | 
                      
                        |  | 608 | /// \brief Add an additional caption to the \c \@attributes section | 
            
                  
                          | 609 | 609 | /// | 
            
                      
                        | 610 |  | /// Set \c \@attributes section to be read | 
                      
                        |  | 610 | /// Add an additional caption to the \c \@attributes section. | 
            
                  
                          | 611 | 611 | DigraphWriter& attributes(const std::string& caption) { | 
                          | 612 | 612 | _attributes_caption = caption; | 
                          | 613 | 613 | return *this; | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 618 | 618 |  | 
                          | 619 | 619 | /// \brief Skip writing the node set | 
                          | 620 | 620 | /// | 
            
                      
                        | 621 |  | /// The \c \@nodes section will be notwritten to the stream. | 
                      
                        |  | 621 | /// The \c \@nodes section will not be written to the stream. | 
            
                  
                          | 622 | 622 | DigraphWriter& skipNodes() { | 
                          | 623 | 623 | LEMON_ASSERT(!_skip_nodes, "Multiple usage of skipNodes() member"); | 
                          | 624 | 624 | _skip_nodes = true; | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 627 | 627 |  | 
                          | 628 | 628 | /// \brief Skip writing arc set | 
                          | 629 | 629 | /// | 
            
                      
                        | 630 |  | /// The \c \@arcs section will be notwritten to the stream. | 
                      
                        |  | 630 | /// The \c \@arcs section will not be written to the stream. | 
            
                  
                          | 631 | 631 | DigraphWriter& skipArcs() { | 
                          | 632 | 632 | LEMON_ASSERT(!_skip_arcs, "Multiple usage of skipArcs() member"); | 
                          | 633 | 633 | _skip_arcs = true; | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 835 | 835 |  | 
                          | 836 | 836 | /// \brief Start the batch processing | 
                          | 837 | 837 | /// | 
            
                      
                        | 838 |  | /// This function starts the batch processing  | 
                      
                        |  | 838 | /// This function starts the batch processing. | 
            
                  
                          | 839 | 839 | void run() { | 
                          | 840 | 840 | if (!_skip_nodes) { | 
                          | 841 | 841 | writeNodes(); | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 850 | 850 | writeAttributes(); | 
                          | 851 | 851 | } | 
                          | 852 | 852 |  | 
            
                      
                        | 853 |  | /// \brief Give sback the stream of the writer | 
                      
                        |  | 853 | /// \brief Give back the stream of the writer | 
            
                  
                          | 854 | 854 | /// | 
            
                      
                        | 855 |  | /// Give s back the stream of the writer | 
                      
                        |  | 855 | /// Give back the stream of the writer. | 
            
                  
                          | 856 | 856 | std::ostream& ostream() { | 
                          | 857 | 857 | return *_os; | 
                          | 858 | 858 | } | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 860 | 860 | /// @} | 
                          | 861 | 861 | }; | 
                          | 862 | 862 |  | 
            
                  
                          |  | 863 | /// \brief Return a \ref DigraphWriter class | 
                          |  | 864 | /// | 
                          |  | 865 | /// This function just returns a \ref DigraphWriter class. | 
            
                  
                          | 863 | 866 | /// \relates DigraphWriter | 
                          | 864 | 867 | template <typename Digraph> | 
                          | 865 | 868 | DigraphWriter<Digraph> digraphWriter(std::ostream& os, | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 868 | 871 | return tmp; | 
                          | 869 | 872 | } | 
                          | 870 | 873 |  | 
            
                  
                          |  | 874 | /// \brief Return a \ref DigraphWriter class | 
                          |  | 875 | /// | 
                          |  | 876 | /// This function just returns a \ref DigraphWriter class. | 
            
                  
                          | 871 | 877 | /// \relates DigraphWriter | 
                          | 872 | 878 | template <typename Digraph> | 
                          | 873 | 879 | DigraphWriter<Digraph> digraphWriter(const std::string& fn, | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 876 | 882 | return tmp; | 
                          | 877 | 883 | } | 
                          | 878 | 884 |  | 
            
                  
                          |  | 885 | /// \brief Return a \ref DigraphWriter class | 
                          |  | 886 | /// | 
                          |  | 887 | /// This function just returns a \ref DigraphWriter class. | 
            
                  
                          | 879 | 888 | /// \relates DigraphWriter | 
                          | 880 | 889 | template <typename Digraph> | 
                          | 881 | 890 | DigraphWriter<Digraph> digraphWriter(const char* fn, | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 898 | 907 |  | 
                          | 899 | 908 | /// \ingroup lemon_io | 
                          | 900 | 909 | /// | 
            
                      
                        | 901 |  | /// \brief LGFwriter for directed graphs | 
                      
                        |  | 910 | /// \brief \ref lgf-format "LGF" writer for directed graphs | 
            
                  
                          | 902 | 911 | /// | 
                          | 903 | 912 | /// This utility writes an \ref lgf-format "LGF" file. | 
            
                  
                          |  | 913 | /// | 
                          |  | 914 | /// It can be used almost the same way as \c DigraphWriter. | 
                          |  | 915 | /// The only difference is that this class can handle edges and | 
                          |  | 916 | /// edge maps as well as arcs and arc maps. | 
            
                  
                          | 904 | 917 | template <typename _Graph> | 
                          | 905 | 918 | class GraphWriter { | 
                          | 906 | 919 | public: | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1023 | 1036 | /// \name Writing rules | 
                          | 1024 | 1037 | /// @{ | 
                          | 1025 | 1038 |  | 
            
                      
                        | 1026 |  | /// \brief Node map reading rule | 
                      
                        |  | 1039 | /// \brief Node map writing rule | 
            
                  
                          | 1027 | 1040 | /// | 
            
                      
                        | 1028 |  | /// Add a node map reading rule to the writer. | 
                      
                        |  | 1041 | /// Add a node map writing rule to the writer. | 
            
                  
                          | 1029 | 1042 | template <typename Map> | 
                          | 1030 | 1043 | GraphWriter& nodeMap(const std::string& caption, const Map& map) { | 
                          | 1031 | 1044 | checkConcept<concepts::ReadMap<Node, typename Map::Value>, Map>(); | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1169 | 1182 | return *this; | 
                          | 1170 | 1183 | } | 
                          | 1171 | 1184 |  | 
            
                      
                        | 1172 |  | /// \name Se lect section by name | 
                      
                        |  | 1185 | /// \name Section captions | 
            
                  
                          | 1173 | 1186 | /// @{ | 
                          | 1174 | 1187 |  | 
            
                      
                        | 1175 |  | /// \brief Set \c \@nodes section to be read | 
                      
                        |  | 1188 | /// \brief Add an additional caption to the \c \@nodes section | 
            
                  
                          | 1176 | 1189 | /// | 
            
                      
                        | 1177 |  | /// Set \c \@nodes section to be read | 
                      
                        |  | 1190 | /// Add an additional caption to the \c \@nodes section. | 
            
                  
                          | 1178 | 1191 | GraphWriter& nodes(const std::string& caption) { | 
                          | 1179 | 1192 | _nodes_caption = caption; | 
                          | 1180 | 1193 | return *this; | 
                          | 1181 | 1194 | } | 
                          | 1182 | 1195 |  | 
            
                      
                        | 1183 |  | /// \brief Set \c \@edges section to be read | 
                      
                        |  | 1196 | /// \brief Add an additional caption to the \c \@arcs section | 
            
                  
                          | 1184 | 1197 | /// | 
            
                      
                        | 1185 |  | /// Set \c \@edges section to be read | 
                      
                        |  | 1198 | /// Add an additional caption to the \c \@arcs section. | 
            
                  
                          | 1186 | 1199 | GraphWriter& edges(const std::string& caption) { | 
                          | 1187 | 1200 | _edges_caption = caption; | 
                          | 1188 | 1201 | return *this; | 
                          | 1189 | 1202 | } | 
                          | 1190 | 1203 |  | 
            
                      
                        | 1191 |  | /// \brief Set \c \@attributes section to be read | 
                      
                        |  | 1204 | /// \brief Add an additional caption to the \c \@attributes section | 
            
                  
                          | 1192 | 1205 | /// | 
            
                      
                        | 1193 |  | /// Set \c \@attributes section to be read | 
                      
                        |  | 1206 | /// Add an additional caption to the \c \@attributes section. | 
            
                  
                          | 1194 | 1207 | GraphWriter& attributes(const std::string& caption) { | 
                          | 1195 | 1208 | _attributes_caption = caption; | 
                          | 1196 | 1209 | return *this; | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1201 | 1214 |  | 
                          | 1202 | 1215 | /// \brief Skip writing the node set | 
                          | 1203 | 1216 | /// | 
            
                      
                        | 1204 |  | /// The \c \@nodes section will be notwritten to the stream. | 
                      
                        |  | 1217 | /// The \c \@nodes section will not be written to the stream. | 
            
                  
                          | 1205 | 1218 | GraphWriter& skipNodes() { | 
                          | 1206 | 1219 | LEMON_ASSERT(!_skip_nodes, "Multiple usage of skipNodes() member"); | 
                          | 1207 | 1220 | _skip_nodes = true; | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1210 | 1223 |  | 
                          | 1211 | 1224 | /// \brief Skip writing edge set | 
                          | 1212 | 1225 | /// | 
            
                      
                        | 1213 |  | /// The \c \@edges section will be notwritten to the stream. | 
                      
                        |  | 1226 | /// The \c \@edges section will not be written to the stream. | 
            
                  
                          | 1214 | 1227 | GraphWriter& skipEdges() { | 
                          | 1215 | 1228 | LEMON_ASSERT(!_skip_edges, "Multiple usage of skipEdges() member"); | 
                          | 1216 | 1229 | _skip_edges = true; | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1418 | 1431 |  | 
                          | 1419 | 1432 | /// \brief Start the batch processing | 
                          | 1420 | 1433 | /// | 
            
                      
                        | 1421 |  | /// This function starts the batch processing  | 
                      
                        |  | 1434 | /// This function starts the batch processing. | 
            
                  
                          | 1422 | 1435 | void run() { | 
                          | 1423 | 1436 | if (!_skip_nodes) { | 
                          | 1424 | 1437 | writeNodes(); | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1433 | 1446 | writeAttributes(); | 
                          | 1434 | 1447 | } | 
                          | 1435 | 1448 |  | 
            
                      
                        | 1436 |  | /// \brief Give sback the stream of the writer | 
                      
                        |  | 1449 | /// \brief Give back the stream of the writer | 
            
                  
                          | 1437 | 1450 | /// | 
            
                      
                        | 1438 |  | /// Give sback the stream of the writer | 
                      
                        |  | 1451 | /// Give back the stream of the writer | 
            
                  
                          | 1439 | 1452 | std::ostream& ostream() { | 
                          | 1440 | 1453 | return *_os; | 
                          | 1441 | 1454 | } | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1443 | 1456 | /// @} | 
                          | 1444 | 1457 | }; | 
                          | 1445 | 1458 |  | 
            
                  
                          |  | 1459 | /// \brief Return a \ref GraphWriter class | 
                          |  | 1460 | /// | 
                          |  | 1461 | /// This function just returns a \ref GraphWriter class. | 
            
                  
                          | 1446 | 1462 | /// \relates GraphWriter | 
                          | 1447 | 1463 | template <typename Graph> | 
                          | 1448 | 1464 | GraphWriter<Graph> graphWriter(std::ostream& os, const Graph& graph) { | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1450 | 1466 | return tmp; | 
                          | 1451 | 1467 | } | 
                          | 1452 | 1468 |  | 
            
                  
                          |  | 1469 | /// \brief Return a \ref GraphWriter class | 
                          |  | 1470 | /// | 
                          |  | 1471 | /// This function just returns a \ref GraphWriter class. | 
            
                  
                          | 1453 | 1472 | /// \relates GraphWriter | 
                          | 1454 | 1473 | template <typename Graph> | 
                          | 1455 | 1474 | GraphWriter<Graph> graphWriter(const std::string& fn, const Graph& graph) { | 
            
              
                
                  | … | … |  | 
              
            
                  
                          | 1457 | 1476 | return tmp; | 
                          | 1458 | 1477 | } | 
                          | 1459 | 1478 |  | 
            
                  
                          |  | 1479 | /// \brief Return a \ref GraphWriter class | 
                          |  | 1480 | /// | 
                          |  | 1481 | /// This function just returns a \ref GraphWriter class. | 
            
                  
                          | 1460 | 1482 | /// \relates GraphWriter | 
                          | 1461 | 1483 | template <typename Graph> | 
                          | 1462 | 1484 | GraphWriter<Graph> graphWriter(const char* fn, const Graph& graph) { |