# HG changeset patch
# User Balazs Dezso <deba@inf.elte.hu>
# Date 1215081604 -7200
# Node ID 70694e6bdcac801824ae907587fb5f9000dc6b9a
# Parent 84c2a2e5cfee5dea7cbd79afadee5df6463a8604
New skip*() functions in (Dig|G)raphReader
diff -r 84c2a2e5cfee -r 70694e6bdcac lemon/lgf_reader.h
a
|
b
|
|
479 | 479 | bool _use_nodes; |
480 | 480 | bool _use_arcs; |
481 | 481 | |
| 482 | bool _skip_nodes; |
| 483 | bool _skip_arcs; |
| 484 | |
482 | 485 | int line_num; |
483 | 486 | std::istringstream line; |
484 | 487 | |
… |
… |
|
490 | 493 | /// input stream. |
491 | 494 | DigraphReader(std::istream& is, Digraph& digraph) |
492 | 495 | : _is(&is), local_is(false), _digraph(digraph), |
493 | | _use_nodes(false), _use_arcs(false) {} |
| 496 | _use_nodes(false), _use_arcs(false), |
| 497 | _skip_nodes(false), _skip_arcs(false) {} |
494 | 498 | |
495 | 499 | /// \brief Constructor |
496 | 500 | /// |
… |
… |
|
498 | 502 | /// file. |
499 | 503 | DigraphReader(const std::string& fn, Digraph& digraph) |
500 | 504 | : _is(new std::ifstream(fn.c_str())), local_is(true), _digraph(digraph), |
501 | | _use_nodes(false), _use_arcs(false) {} |
| 505 | _use_nodes(false), _use_arcs(false), |
| 506 | _skip_nodes(false), _skip_arcs(false) {} |
502 | 507 | |
503 | 508 | /// \brief Constructor |
504 | 509 | /// |
… |
… |
|
506 | 511 | /// file. |
507 | 512 | DigraphReader(const char* fn, Digraph& digraph) |
508 | 513 | : _is(new std::ifstream(fn)), local_is(true), _digraph(digraph), |
509 | | _use_nodes(false), _use_arcs(false) {} |
| 514 | _use_nodes(false), _use_arcs(false), |
| 515 | _skip_nodes(false), _skip_arcs(false) {} |
510 | 516 | |
511 | 517 | /// \brief Copy constructor |
512 | 518 | /// |
… |
… |
|
514 | 520 | /// therefore the copied reader will not be usable more. |
515 | 521 | DigraphReader(DigraphReader& other) |
516 | 522 | : _is(other._is), local_is(other.local_is), _digraph(other._digraph), |
517 | | _use_nodes(other._use_nodes), _use_arcs(other._use_arcs) { |
| 523 | _use_nodes(other._use_nodes), _use_arcs(other._use_arcs), |
| 524 | _skip_nodes(other._skip_nodes), _skip_arcs(other._skip_arcs) { |
518 | 525 | |
519 | 526 | other._is = 0; |
520 | 527 | other.local_is = false; |
… |
… |
|
837 | 844 | /// std::string. |
838 | 845 | template <typename Map, typename Converter> |
839 | 846 | DigraphReader& useArcs(const Map& map, |
840 | | const Converter& converter = Converter()) { |
| 847 | const Converter& converter = Converter()) { |
841 | 848 | checkConcept<concepts::ReadMap<Arc, typename Map::Value>, Map>(); |
842 | 849 | LEMON_ASSERT(!_use_arcs, "Multiple usage of useArcs() member"); |
843 | 850 | _use_arcs = true; |
844 | 851 | for (ArcIt a(_digraph); a != INVALID; ++a) { |
845 | 852 | _arc_index.insert(std::make_pair(converter(map[a]), a)); |
846 | 853 | } |
| 854 | return *this; |
| 855 | } |
| 856 | |
| 857 | /// \brief Skips the reading of node section |
| 858 | /// |
| 859 | /// Omit the reading of the node section. This implies that each node |
| 860 | /// map reading rule will be abanoned, and the nodes of the graph |
| 861 | /// will not be constructed, which usually cause that the arc set |
| 862 | /// could not be read due to lack of node name |
| 863 | /// resolving. Therefore, the \c skipArcs() should be used too, or |
| 864 | /// the useNodes() member function should be used to specify the |
| 865 | /// label of the nodes. |
| 866 | DigraphReader& skipNodes() { |
| 867 | LEMON_ASSERT(!_skip_nodes, "Skip nodes already set"); |
| 868 | _skip_nodes = true; |
| 869 | return *this; |
| 870 | } |
| 871 | |
| 872 | /// \brief Skips the reading of arc section |
| 873 | /// |
| 874 | /// Omit the reading of the arc section. This implies that each arc |
| 875 | /// map reading rule will be abanoned, and the arcs of the graph |
| 876 | /// will not be constructed. |
| 877 | DigraphReader& skipArcs() { |
| 878 | LEMON_ASSERT(!_skip_arcs, "Skip arcs already set"); |
| 879 | _skip_arcs = true; |
847 | 880 | return *this; |
848 | 881 | } |
849 | 882 | |
… |
… |
|
1152 | 1185 | throw DataFormatError("Cannot find file"); |
1153 | 1186 | } |
1154 | 1187 | |
1155 | | bool nodes_done = false; |
1156 | | bool arcs_done = false; |
| 1188 | bool nodes_done = _skip_nodes; |
| 1189 | bool arcs_done = _skip_arcs; |
1157 | 1190 | bool attributes_done = false; |
1158 | 1191 | std::set<std::string> extra_sections; |
1159 | 1192 | |
… |
… |
|
1295 | 1328 | bool _use_nodes; |
1296 | 1329 | bool _use_edges; |
1297 | 1330 | |
| 1331 | bool _skip_nodes; |
| 1332 | bool _skip_edges; |
| 1333 | |
1298 | 1334 | int line_num; |
1299 | 1335 | std::istringstream line; |
1300 | 1336 | |
… |
… |
|
1306 | 1342 | /// input stream. |
1307 | 1343 | GraphReader(std::istream& is, Graph& graph) |
1308 | 1344 | : _is(&is), local_is(false), _graph(graph), |
1309 | | _use_nodes(false), _use_edges(false) {} |
| 1345 | _use_nodes(false), _use_edges(false), |
| 1346 | _skip_nodes(false), _skip_edges(false) {} |
1310 | 1347 | |
1311 | 1348 | /// \brief Constructor |
1312 | 1349 | /// |
… |
… |
|
1314 | 1351 | /// file. |
1315 | 1352 | GraphReader(const std::string& fn, Graph& graph) |
1316 | 1353 | : _is(new std::ifstream(fn.c_str())), local_is(true), _graph(graph), |
1317 | | _use_nodes(false), _use_edges(false) {} |
| 1354 | _use_nodes(false), _use_edges(false), |
| 1355 | _skip_nodes(false), _skip_edges(false) {} |
1318 | 1356 | |
1319 | 1357 | /// \brief Constructor |
1320 | 1358 | /// |
… |
… |
|
1322 | 1360 | /// file. |
1323 | 1361 | GraphReader(const char* fn, Graph& graph) |
1324 | 1362 | : _is(new std::ifstream(fn)), local_is(true), _graph(graph), |
1325 | | _use_nodes(false), _use_edges(false) {} |
| 1363 | _use_nodes(false), _use_edges(false), |
| 1364 | _skip_nodes(false), _skip_edges(false) {} |
1326 | 1365 | |
1327 | 1366 | /// \brief Copy constructor |
1328 | 1367 | /// |
… |
… |
|
1330 | 1369 | /// therefore the copied reader will not be usable more. |
1331 | 1370 | GraphReader(GraphReader& other) |
1332 | 1371 | : _is(other._is), local_is(other.local_is), _graph(other._graph), |
1333 | | _use_nodes(other._use_nodes), _use_edges(other._use_edges) { |
| 1372 | _use_nodes(other._use_nodes), _use_edges(other._use_edges), |
| 1373 | _skip_nodes(other._skip_nodes), _skip_edges(other._skip_edges) { |
1334 | 1374 | |
1335 | 1375 | other._is = 0; |
1336 | 1376 | other.local_is = false; |
… |
… |
|
1706 | 1746 | for (EdgeIt a(_graph); a != INVALID; ++a) { |
1707 | 1747 | _edge_index.insert(std::make_pair(converter(map[a]), a)); |
1708 | 1748 | } |
| 1749 | return *this; |
| 1750 | } |
| 1751 | |
| 1752 | /// \brief Skips the reading of node section |
| 1753 | /// |
| 1754 | /// Omit the reading of the node section. This implies that each node |
| 1755 | /// map reading rule will be abanoned, and the nodes of the graph |
| 1756 | /// will not be constructed, which usually cause that the edge set |
| 1757 | /// could not be read due to lack of node name |
| 1758 | /// resolving. Therefore, the \c skipEdges() should be used too, or |
| 1759 | /// the useNodes() member function should be used to specify the |
| 1760 | /// label of the nodes. |
| 1761 | GraphReader& skipNodes() { |
| 1762 | LEMON_ASSERT(!_skip_nodes, "Skip nodes already set"); |
| 1763 | _skip_nodes = true; |
| 1764 | return *this; |
| 1765 | } |
| 1766 | |
| 1767 | /// \brief Skips the reading of edge section |
| 1768 | /// |
| 1769 | /// Omit the reading of the edge section. This implies that each edge |
| 1770 | /// map reading rule will be abanoned, and the edges of the graph |
| 1771 | /// will not be constructed. |
| 1772 | GraphReader& skipEdges() { |
| 1773 | LEMON_ASSERT(!_skip_edges, "Skip edges already set"); |
| 1774 | _skip_edges = true; |
1709 | 1775 | return *this; |
1710 | 1776 | } |
1711 | 1777 | |
… |
… |
|
2012 | 2078 | |
2013 | 2079 | LEMON_ASSERT(_is != 0, "This reader assigned to an other reader"); |
2014 | 2080 | |
2015 | | bool nodes_done = false; |
2016 | | bool edges_done = false; |
| 2081 | bool nodes_done = _skip_nodes; |
| 2082 | bool edges_done = _skip_edges; |
2017 | 2083 | bool attributes_done = false; |
2018 | 2084 | std::set<std::string> extra_sections; |
2019 | 2085 | |