gravatar
deba@inf.elte.hu
deba@inf.elte.hu
New skip*() functions in (Dig|G)raphReader
0 1 0
default
1 file changed with 78 insertions and 12 deletions:
↑ Collapse diff ↑
Show white space 6 line context
... ...
@@ -479,6 +479,9 @@
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,7 +493,8 @@
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,7 +502,8 @@
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,7 +511,8 @@
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,7 +520,8 @@
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;
... ...
@@ -847,6 +854,32 @@
847 854
      return *this;
848 855
    }
849 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;
880
      return *this;
881
    }
882

	
850 883
    /// @}
851 884

	
852 885
  private:
... ...
@@ -1152,8 +1185,8 @@
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,6 +1328,9 @@
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,7 +1342,8 @@
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,7 +1351,8 @@
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,7 +1360,8 @@
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,7 +1369,8 @@
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;
... ...
@@ -1709,6 +1749,32 @@
1709 1749
      return *this;
1710 1750
    }
1711 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;
1775
      return *this;
1776
    }
1777

	
1712 1778
    /// @}
1713 1779

	
1714 1780
  private:
... ...
@@ -2012,8 +2078,8 @@
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

	
0 comments (0 inline)