gravatar
deba@inf.elte.hu
deba@inf.elte.hu
Fix skip*() functions is GraphWriters (Ticket #107)
0 1 0
default
1 file changed with 108 insertions and 0 deletions:
↑ Collapse diff ↑
Show white space 12 line context
... ...
@@ -600,20 +600,22 @@
600 600

	
601 601
    /// \brief Skip writing the node set
602 602
    ///
603 603
    /// The \c \@nodes section will be not written to the stream.
604 604
    DigraphWriter& skipNodes() {
605 605
      LEMON_ASSERT(!_skip_nodes, "Multiple usage of skipNodes() member");
606
      _skip_nodes = true;
606 607
      return *this;
607 608
    }
608 609

	
609 610
    /// \brief Skip writing arc set
610 611
    ///
611 612
    /// The \c \@arcs section will be not written to the stream.
612 613
    DigraphWriter& skipArcs() {
613 614
      LEMON_ASSERT(!_skip_arcs, "Multiple usage of skipArcs() member");
615
      _skip_arcs = true;
614 616
      return *this;
615 617
    }
616 618

	
617 619
    /// @}
618 620

	
619 621
  private:
... ...
@@ -675,12 +677,36 @@
675 677
	  *_os << '\t';
676 678
	}
677 679
	*_os << std::endl;
678 680
      }
679 681
    }
680 682

	
683
    void createNodeIndex() {
684
      _writer_bits::MapStorageBase<Node>* label = 0;
685
      for (typename NodeMaps::iterator it = _node_maps.begin();
686
	   it != _node_maps.end(); ++it) {
687
        if (it->first == "label") {
688
	  label = it->second;
689
	  break;
690
	}
691
      }
692

	
693
      if (label == 0) {
694
	for (NodeIt n(_digraph); n != INVALID; ++n) {
695
	  std::ostringstream os;
696
	  os << _digraph.id(n);
697
	  _node_index.insert(std::make_pair(n, os.str()));	  
698
	}	
699
      } else {
700
	for (NodeIt n(_digraph); n != INVALID; ++n) {
701
	  std::string value = label->get(n);	  
702
	  _node_index.insert(std::make_pair(n, value));
703
	}
704
      }
705
    }
706

	
681 707
    void writeArcs() {
682 708
      _writer_bits::MapStorageBase<Arc>* label = 0;
683 709
      for (typename ArcMaps::iterator it = _arc_maps.begin();
684 710
	   it != _arc_maps.end(); ++it) {
685 711
        if (it->first == "label") {
686 712
	  label = it->second;
... ...
@@ -742,12 +768,36 @@
742 768
	  *_os << '\t';
743 769
	}
744 770
	*_os << std::endl;
745 771
      }
746 772
    }
747 773

	
774
    void createArcIndex() {
775
      _writer_bits::MapStorageBase<Arc>* label = 0;
776
      for (typename ArcMaps::iterator it = _arc_maps.begin();
777
	   it != _arc_maps.end(); ++it) {
778
        if (it->first == "label") {
779
	  label = it->second;
780
	  break;
781
	}
782
      }
783

	
784
      if (label == 0) {
785
	for (ArcIt a(_digraph); a != INVALID; ++a) {
786
	  std::ostringstream os;
787
	  os << _digraph.id(a);
788
	  _arc_index.insert(std::make_pair(a, os.str()));	  
789
	}	
790
      } else {
791
	for (ArcIt a(_digraph); a != INVALID; ++a) {
792
	  std::string value = label->get(a);	  
793
	  _arc_index.insert(std::make_pair(a, value));
794
	}
795
      }
796
    }
797

	
748 798
    void writeAttributes() {
749 799
      if (_attributes.empty()) return;
750 800
      *_os << "@attributes";
751 801
      if (!_attributes_caption.empty()) {
752 802
	_writer_bits::writeToken(*_os << ' ', _attributes_caption);
753 803
      }
... ...
@@ -768,15 +818,19 @@
768 818
    /// \brief Start the batch processing
769 819
    ///
770 820
    /// This function starts the batch processing
771 821
    void run() {
772 822
      if (!_skip_nodes) {
773 823
	writeNodes();
824
      } else {
825
	createNodeIndex();
774 826
      }
775 827
      if (!_skip_arcs) {      
776 828
	writeArcs();
829
      } else {
830
	createArcIndex();
777 831
      }
778 832
      writeAttributes();
779 833
    }
780 834

	
781 835
    /// \brief Gives back the stream of the writer
782 836
    ///
... ...
@@ -1112,20 +1166,22 @@
1112 1166

	
1113 1167
    /// \brief Skip writing the node set
1114 1168
    ///
1115 1169
    /// The \c \@nodes section will be not written to the stream.
1116 1170
    GraphWriter& skipNodes() {
1117 1171
      LEMON_ASSERT(!_skip_nodes, "Multiple usage of skipNodes() member");
1172
      _skip_nodes = true;
1118 1173
      return *this;
1119 1174
    }
1120 1175

	
1121 1176
    /// \brief Skip writing edge set
1122 1177
    ///
1123 1178
    /// The \c \@edges section will be not written to the stream.
1124 1179
    GraphWriter& skipEdges() {
1125 1180
      LEMON_ASSERT(!_skip_edges, "Multiple usage of skipEdges() member");
1181
      _skip_edges = true;
1126 1182
      return *this;
1127 1183
    }
1128 1184

	
1129 1185
    /// @}
1130 1186

	
1131 1187
  private:
... ...
@@ -1187,12 +1243,36 @@
1187 1243
	  *_os << '\t';
1188 1244
	}
1189 1245
	*_os << std::endl;
1190 1246
      }
1191 1247
    }
1192 1248

	
1249
    void createNodeIndex() {
1250
      _writer_bits::MapStorageBase<Node>* label = 0;
1251
      for (typename NodeMaps::iterator it = _node_maps.begin();
1252
	   it != _node_maps.end(); ++it) {
1253
        if (it->first == "label") {
1254
	  label = it->second;
1255
	  break;
1256
	}
1257
      }
1258

	
1259
      if (label == 0) {
1260
	for (NodeIt n(_graph); n != INVALID; ++n) {
1261
	  std::ostringstream os;
1262
	  os << _graph.id(n);
1263
	  _node_index.insert(std::make_pair(n, os.str()));	  
1264
	}	
1265
      } else {
1266
	for (NodeIt n(_graph); n != INVALID; ++n) {
1267
	  std::string value = label->get(n);	  
1268
	  _node_index.insert(std::make_pair(n, value));
1269
	}
1270
      }
1271
    }
1272

	
1193 1273
    void writeEdges() {
1194 1274
      _writer_bits::MapStorageBase<Edge>* label = 0;
1195 1275
      for (typename EdgeMaps::iterator it = _edge_maps.begin();
1196 1276
	   it != _edge_maps.end(); ++it) {
1197 1277
        if (it->first == "label") {
1198 1278
	  label = it->second;
... ...
@@ -1254,12 +1334,36 @@
1254 1334
	  *_os << '\t';
1255 1335
	}
1256 1336
	*_os << std::endl;
1257 1337
      }
1258 1338
    }
1259 1339

	
1340
    void createEdgeIndex() {
1341
      _writer_bits::MapStorageBase<Edge>* label = 0;
1342
      for (typename EdgeMaps::iterator it = _edge_maps.begin();
1343
	   it != _edge_maps.end(); ++it) {
1344
        if (it->first == "label") {
1345
	  label = it->second;
1346
	  break;
1347
	}
1348
      }
1349

	
1350
      if (label == 0) {
1351
	for (EdgeIt e(_graph); e != INVALID; ++e) {
1352
	  std::ostringstream os;
1353
	  os << _graph.id(e);
1354
	  _edge_index.insert(std::make_pair(e, os.str()));	  
1355
	}	
1356
      } else {
1357
	for (EdgeIt e(_graph); e != INVALID; ++e) {
1358
	  std::string value = label->get(e);	  
1359
	  _edge_index.insert(std::make_pair(e, value));
1360
	}
1361
      }
1362
    }
1363

	
1260 1364
    void writeAttributes() {
1261 1365
      if (_attributes.empty()) return;
1262 1366
      *_os << "@attributes";
1263 1367
      if (!_attributes_caption.empty()) {
1264 1368
	_writer_bits::writeToken(*_os << ' ', _attributes_caption);
1265 1369
      }
... ...
@@ -1280,15 +1384,19 @@
1280 1384
    /// \brief Start the batch processing
1281 1385
    ///
1282 1386
    /// This function starts the batch processing
1283 1387
    void run() {
1284 1388
      if (!_skip_nodes) {
1285 1389
	writeNodes();
1390
      } else {
1391
	createNodeIndex();
1286 1392
      }
1287 1393
      if (!_skip_edges) {      
1288 1394
	writeEdges();
1395
      } else {
1396
	createEdgeIndex();
1289 1397
      }
1290 1398
      writeAttributes();
1291 1399
    }
1292 1400

	
1293 1401
    /// \brief Gives back the stream of the writer
1294 1402
    ///
0 comments (0 inline)