# HG changeset patch
# User Balazs Dezso <deba@inf.elte.hu>
# Date 1214940109 -7200
# Node ID 33e45a9b868cab9cfeed4563edae07c42f908abd
# Parent 716b220697a00d88556c5c9138c8bad2ecc40def
Fix skip*() functions is GraphWriters (Ticket #107)
diff -r 716b220697a0 -r 33e45a9b868c lemon/lgf_writer.h
a
|
b
|
|
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 | |
… |
… |
|
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 | |
… |
… |
|
675 | 677 | *_os << '\t'; |
676 | 678 | } |
677 | 679 | *_os << std::endl; |
| 680 | } |
| 681 | } |
| 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 | } |
678 | 704 | } |
679 | 705 | } |
680 | 706 | |
… |
… |
|
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"; |
… |
… |
|
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 | } |
… |
… |
|
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 | |
… |
… |
|
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 | |
… |
… |
|
1187 | 1243 | *_os << '\t'; |
1188 | 1244 | } |
1189 | 1245 | *_os << std::endl; |
| 1246 | } |
| 1247 | } |
| 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 | } |
1190 | 1270 | } |
1191 | 1271 | } |
1192 | 1272 | |
… |
… |
|
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"; |
… |
… |
|
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 | } |