# 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 | |