... | ... |
@@ -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)