Changeset 1492:0d58f0301923 in lemon-0.x for lemon/lemon_reader.h
- Timestamp:
- 06/15/05 12:10:59 (18 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@1973
- File:
-
- 1 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;
Note: See TracChangeset
for help on using the changeset viewer.