... | ... |
@@ -594,32 +594,34 @@ |
594 | 594 |
_attributes_caption = caption; |
595 | 595 |
return *this; |
596 | 596 |
} |
597 | 597 |
|
598 | 598 |
/// \name Skipping section |
599 | 599 |
/// @{ |
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: |
620 | 622 |
|
621 | 623 |
void writeNodes() { |
622 | 624 |
_writer_bits::MapStorageBase<Node>* label = 0; |
623 | 625 |
for (typename NodeMaps::iterator it = _node_maps.begin(); |
624 | 626 |
it != _node_maps.end(); ++it) { |
625 | 627 |
if (it->first == "label") { |
... | ... |
@@ -669,24 +671,48 @@ |
669 | 671 |
it != _node_maps.end(); ++it) { |
670 | 672 |
std::string value = it->second->get(n); |
671 | 673 |
_writer_bits::writeToken(*_os, value); |
672 | 674 |
if (it->first == "label") { |
673 | 675 |
_node_index.insert(std::make_pair(n, value)); |
674 | 676 |
} |
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; |
687 | 713 |
break; |
688 | 714 |
} |
689 | 715 |
} |
690 | 716 |
|
691 | 717 |
*_os << "@arcs"; |
692 | 718 |
if (!_arcs_caption.empty()) { |
... | ... |
@@ -736,24 +762,48 @@ |
736 | 762 |
it != _arc_maps.end(); ++it) { |
737 | 763 |
std::string value = it->second->get(a); |
738 | 764 |
_writer_bits::writeToken(*_os, value); |
739 | 765 |
if (it->first == "label") { |
740 | 766 |
_arc_index.insert(std::make_pair(a, value)); |
741 | 767 |
} |
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 |
} |
754 | 804 |
*_os << std::endl; |
755 | 805 |
for (typename Attributes::iterator it = _attributes.begin(); |
756 | 806 |
it != _attributes.end(); ++it) { |
757 | 807 |
_writer_bits::writeToken(*_os, it->first) << ' '; |
758 | 808 |
_writer_bits::writeToken(*_os, it->second->get()); |
759 | 809 |
*_os << std::endl; |
... | ... |
@@ -762,27 +812,31 @@ |
762 | 812 |
|
763 | 813 |
public: |
764 | 814 |
|
765 | 815 |
/// \name Execution of the writer |
766 | 816 |
/// @{ |
767 | 817 |
|
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 |
/// |
783 | 837 |
/// Gives back the stream of the writer |
784 | 838 |
std::ostream& ostream() { |
785 | 839 |
return *_os; |
786 | 840 |
} |
787 | 841 |
|
788 | 842 |
/// @} |
... | ... |
@@ -1106,32 +1160,34 @@ |
1106 | 1160 |
_attributes_caption = caption; |
1107 | 1161 |
return *this; |
1108 | 1162 |
} |
1109 | 1163 |
|
1110 | 1164 |
/// \name Skipping section |
1111 | 1165 |
/// @{ |
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: |
1132 | 1188 |
|
1133 | 1189 |
void writeNodes() { |
1134 | 1190 |
_writer_bits::MapStorageBase<Node>* label = 0; |
1135 | 1191 |
for (typename NodeMaps::iterator it = _node_maps.begin(); |
1136 | 1192 |
it != _node_maps.end(); ++it) { |
1137 | 1193 |
if (it->first == "label") { |
... | ... |
@@ -1181,24 +1237,48 @@ |
1181 | 1237 |
it != _node_maps.end(); ++it) { |
1182 | 1238 |
std::string value = it->second->get(n); |
1183 | 1239 |
_writer_bits::writeToken(*_os, value); |
1184 | 1240 |
if (it->first == "label") { |
1185 | 1241 |
_node_index.insert(std::make_pair(n, value)); |
1186 | 1242 |
} |
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; |
1199 | 1279 |
break; |
1200 | 1280 |
} |
1201 | 1281 |
} |
1202 | 1282 |
|
1203 | 1283 |
*_os << "@edges"; |
1204 | 1284 |
if (!_edges_caption.empty()) { |
... | ... |
@@ -1248,24 +1328,48 @@ |
1248 | 1328 |
it != _edge_maps.end(); ++it) { |
1249 | 1329 |
std::string value = it->second->get(e); |
1250 | 1330 |
_writer_bits::writeToken(*_os, value); |
1251 | 1331 |
if (it->first == "label") { |
1252 | 1332 |
_edge_index.insert(std::make_pair(e, value)); |
1253 | 1333 |
} |
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 |
} |
1266 | 1370 |
*_os << std::endl; |
1267 | 1371 |
for (typename Attributes::iterator it = _attributes.begin(); |
1268 | 1372 |
it != _attributes.end(); ++it) { |
1269 | 1373 |
_writer_bits::writeToken(*_os, it->first) << ' '; |
1270 | 1374 |
_writer_bits::writeToken(*_os, it->second->get()); |
1271 | 1375 |
*_os << std::endl; |
... | ... |
@@ -1274,27 +1378,31 @@ |
1274 | 1378 |
|
1275 | 1379 |
public: |
1276 | 1380 |
|
1277 | 1381 |
/// \name Execution of the writer |
1278 | 1382 |
/// @{ |
1279 | 1383 |
|
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 |
/// |
1295 | 1403 |
/// Gives back the stream of the writer |
1296 | 1404 |
std::ostream& ostream() { |
1297 | 1405 |
return *_os; |
1298 | 1406 |
} |
1299 | 1407 |
|
1300 | 1408 |
/// @} |
0 comments (0 inline)