Changeset 1492:0d58f0301923 in lemon-0.x
- Timestamp:
- 06/15/05 12:10:59 (18 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@1973
- Location:
- lemon
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/lemon_reader.h
r1477 r1492 50 50 bool isIdReader() { return true; } 51 51 52 Item readId(std::istream&, Item) { return Item();}52 void readId(std::istream&, Item&) {} 53 53 54 54 template <class _ItemIdReader> … … 57 57 bool b = reader.isIdReader(); 58 58 ignore_unused_variable_warning(b); 59 Item item = reader.readId(is, Item()); 59 Item item; 60 reader.readId(is, item); 60 61 } 61 62 _ItemIdReader& reader; 63 std::istream& is; 64 }; 65 66 }; 67 68 template <typename Item> 69 class ItemReader { 70 public: 71 void read(std::istream&, Item&) {} 72 73 template <class _ItemReader> 74 struct Constraints { 75 void constraints() { 76 Item item; 77 reader.read(is, item); 78 } 79 _ItemReader& reader; 62 80 std::istream& is; 63 81 }; … … 570 588 571 589 virtual Item read(std::istream& is) const { 572 return boxedIdReader.readId(is, Item()); 590 Item item; 591 boxedIdReader.readId(is, item); 592 return item; 573 593 } 574 594 … … 697 717 NodeSetReader& _readMap(std::string name, MapParameter map, 698 718 const Reader& reader = Reader()) { 719 checkConcept<concept::WriteMap<Node, typename Map::Value>, Map>(); 720 checkConcept<_reader_bits::ItemReader<typename Map::Value>, Reader>(); 699 721 if (readers.find(name) != readers.end()) { 700 722 ErrorMessage msg; … … 783 805 /// It reads an id from the stream and gives back which node belongs to 784 806 /// it. It is possible only if there was read an "id" named map. 785 Node readId(std::istream& is, Node = Node()) const {786 returninverter->read(is);807 void readId(std::istream& is, Node& node) const { 808 node = inverter->read(is); 787 809 } 788 810 … … 905 927 EdgeSetReader& _readMap(std::string name, MapParameter map, 906 928 const Reader& reader = Reader()) { 929 checkConcept<concept::WriteMap<Edge, typename Map::Value>, Map>(); 930 checkConcept<_reader_bits::ItemReader<typename Map::Value>, Reader>(); 907 931 if (readers.find(name) != readers.end()) { 908 932 ErrorMessage msg; … … 996 1020 /// It reads an id from the stream and gives back which edge belongs to 997 1021 /// it. It is possible only if there was read an "id" named map. 998 Edge readId(std::istream& is, Edge = Edge()) const {999 returninverter->read(is);1022 void readId(std::istream& is, Edge& edge) const { 1023 edge = inverter->read(is); 1000 1024 } 1001 1025 … … 1125 1149 UndirEdgeSetReader& _readMap(std::string name, MapParameter map, 1126 1150 const Reader& reader = Reader()) { 1151 checkConcept<concept::WriteMap<UndirEdge, typename Map::Value>, Map>(); 1152 checkConcept<_reader_bits::ItemReader<typename Map::Value>, Reader>(); 1127 1153 if (readers.find(name) != readers.end()) { 1128 1154 ErrorMessage msg; … … 1191 1217 template <typename Reader, typename Map, typename MapParameter> 1192 1218 UndirEdgeSetReader& _readDirMap(std::string name, MapParameter map, 1193 const Reader& reader = Reader()) { 1219 const Reader& reader = Reader()) { 1220 checkConcept<_reader_bits::ItemReader<typename Map::Value>, Reader>(); 1221 checkConcept<concept::WriteMap<Edge, typename Map::Value>, Map>(); 1194 1222 readMap("+" + name, 1195 1223 _reader_bits::writeComposeMap(map, forwardMap(graph)), reader); … … 1276 1304 /// It reads an id from the stream and gives back which undirected edge 1277 1305 /// belongs to it. It is possible only if there was read an "id" named map. 1278 UndirEdge readId(std::istream& is, UndirEdge = UndirEdge()) const {1279 returninverter->read(is);1306 void readId(std::istream& is, UndirEdge& undirEdge) const { 1307 undirEdge = inverter->read(is); 1280 1308 } 1281 1309 … … 1286 1314 /// and the undirected edge id. It is possible only if there was read 1287 1315 /// an "id" named map. 1288 Edge readId(std::istream& is, Edge = Edge()) const {1316 void readId(std::istream& is, Edge& edge) const { 1289 1317 char c; 1290 1318 is >> c; 1291 1319 UndirEdge undirEdge = inverter->read(is); 1292 1320 if (c == '+') { 1293 returngraph.edgeWithSource(undirEdge, graph.source(undirEdge));1321 edge = graph.edgeWithSource(undirEdge, graph.source(undirEdge)); 1294 1322 } else if (c == '-') { 1295 returngraph.edgeWithSource(undirEdge, graph.target(undirEdge));1323 edge = graph.edgeWithSource(undirEdge, graph.target(undirEdge)); 1296 1324 } else { 1297 1325 throw DataFormatError("Wrong id format for edge " … … 1341 1369 : Parent(_reader), id(_id) { 1342 1370 checkConcept<_reader_bits::ItemIdReader<Node>, _IdReader>(); 1343 idReader.reset(new IdReader<Node, _IdReader>(_idReader));1371 nodeIdReader.reset(new IdReader<Node, _IdReader>(_idReader)); 1344 1372 } 1345 1373 … … 1386 1414 /// It reads the content of the section. 1387 1415 virtual void read(std::istream& is) { 1388 if (! idReader->isIdReader()) {1416 if (!nodeIdReader->isIdReader()) { 1389 1417 throw DataFormatError("Cannot find nodeset or ID map"); 1390 1418 } … … 1396 1424 typename NodeReaders::iterator it = readers.find(id); 1397 1425 if (it != readers.end()) { 1398 *(it->second) = idReader->read(ls);1426 *(it->second) = nodeIdReader->read(ls); 1399 1427 } 1400 1428 } … … 1407 1435 typedef std::map<std::string, Node*> NodeReaders; 1408 1436 NodeReaders readers; 1409 std::auto_ptr<IdReaderBase<Node> > idReader;1437 std::auto_ptr<IdReaderBase<Node> > nodeIdReader; 1410 1438 }; 1411 1439 … … 1438 1466 : Parent(_reader), id(_id) { 1439 1467 checkConcept<_reader_bits::ItemIdReader<Edge>, _IdReader>(); 1440 idReader.reset(new IdReader<Edge, _IdReader>(_idReader));1468 edgeIdReader.reset(new IdReader<Edge, _IdReader>(_idReader)); 1441 1469 } 1442 1470 … … 1482 1510 /// It reads the content of the section. 1483 1511 virtual void read(std::istream& is) { 1484 if (! idReader->isIdReader()) {1512 if (!edgeIdReader->isIdReader()) { 1485 1513 throw DataFormatError("Cannot find edgeset or ID map"); 1486 1514 } … … 1492 1520 typename EdgeReaders::iterator it = readers.find(id); 1493 1521 if (it != readers.end()) { 1494 *(it->second) = idReader->read(ls);1522 *(it->second) = edgeIdReader->read(ls); 1495 1523 } 1496 1524 } … … 1503 1531 typedef std::map<std::string, Edge*> EdgeReaders; 1504 1532 EdgeReaders readers; 1505 std::auto_ptr<IdReaderBase<Edge> > idReader;1533 std::auto_ptr<IdReaderBase<Edge> > edgeIdReader; 1506 1534 }; 1507 1535 … … 1689 1717 AttributeReader& readAttribute(const std::string& name, Value& value, 1690 1718 const Reader& reader = Reader()) { 1719 checkConcept<_reader_bits::ItemReader<Value>, Reader>(); 1691 1720 if (readers.find(name) != readers.end()) { 1692 1721 ErrorMessage msg; -
lemon/lemon_writer.h
r1476 r1492 56 56 struct Constraints { 57 57 void constraints() { 58 const Item item;59 58 bool b = writer.isIdWriter(); 60 59 ignore_unused_variable_warning(b); … … 63 62 _ItemIdWriter& writer; 64 63 std::ostream& os; 64 const Item& item; 65 }; 66 67 }; 68 69 template <typename Item> 70 class ItemWriter { 71 public: 72 73 void write(std::ostream&, const Item&) {} 74 75 template <class _ItemWriter> 76 struct Constraints { 77 void constraints() { 78 writer.write(os, item); 79 } 80 _ItemWriter& writer; 81 std::ostream& os; 82 const Item& item; 65 83 }; 66 84 … … 353 371 NodeSetWriter& writeNodeMap(std::string name, const Map& map, 354 372 const Writer& writer = Writer()) { 355 checkConcept<concept::WriteMap<Node, typename Map::Value>, Map>(); 373 checkConcept<concept::ReadMap<Node, typename Map::Value>, Map>(); 374 checkConcept<_writer_bits::ItemWriter<typename Map::Value>, Writer>(); 356 375 writers.push_back( 357 376 make_pair(name, new MapWriter<Node, Map, Writer>(map, writer))); … … 518 537 EdgeSetWriter& writeEdgeMap(std::string name, const Map& map, 519 538 const Writer& writer = Writer()) { 520 checkConcept<concept::WriteMap<Edge, typename Map::Value>, Map>(); 539 checkConcept<concept::ReadMap<Edge, typename Map::Value>, Map>(); 540 checkConcept<_writer_bits::ItemWriter<typename Map::Value>, Writer>(); 521 541 writers.push_back( 522 542 make_pair(name, new MapWriter<Edge, Map, Writer>(map, writer))); … … 699 719 UndirEdgeSetWriter& writeUndirEdgeMap(std::string name, const Map& map, 700 720 const Writer& writer = Writer()) { 701 checkConcept<concept::WriteMap<UndirEdge, typename Map::Value>, Map>(); 721 checkConcept<concept::ReadMap<UndirEdge, typename Map::Value>, Map>(); 722 checkConcept<_writer_bits::ItemWriter<typename Map::Value>, Writer>(); 702 723 writers.push_back( 703 724 make_pair(name, new MapWriter<UndirEdge, Map, Writer>(map, writer))); … … 710 731 template <typename Map> 711 732 UndirEdgeSetWriter& writeEdgeMap(std::string name, const Map& map) { 712 checkConcept<concept::WriteMap<Edge, typename Map::Value>, Map>(); 713 writeUndirEdgeMap("+" + name, composeMap(forwardMap(graph), map)); 714 writeUndirEdgeMap("-" + name, composeMap(backwardMap(graph), map)); 715 return *this; 733 return writeEdgeMap<typename Traits:: 734 template Writer<typename Map::Value>, Map>(name, map); 716 735 } 717 736 … … 722 741 UndirEdgeSetWriter& writeEdgeMap(std::string name, const Map& map, 723 742 const Writer& writer = Writer()) { 724 checkConcept<concept::WriteMap<Edge, typename Map::Value>, Map>(); 743 checkConcept<concept::ReadMap<Edge, typename Map::Value>, Map>(); 744 checkConcept<_writer_bits::ItemWriter<typename Map::Value>, Writer>(); 725 745 writeUndirEdge("+" + name, composeMap(forwardMap(graph), map), writer); 726 746 writeUndirEdge("-" + name, composeMap(backwardMap(graph), map), writer); … … 1161 1181 const Value& value, 1162 1182 const Writer& writer = Writer()) { 1183 checkConcept<_writer_bits::ItemWriter<Value>, Writer>(); 1163 1184 writers.push_back(make_pair(name, new ValueWriter<Value, Writer> 1164 1185 (value, writer)));
Note: See TracChangeset
for help on using the changeset viewer.