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