Changeset 1476:182da222fceb in lemon-0.x for lemon/lemon_reader.h
- Timestamp:
- 06/13/05 19:13:56 (20 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@1956
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/lemon_reader.h
r1435 r1476 37 37 #include <lemon/bits/item_reader.h> 38 38 39 #include <lemon/concept_check.h> 40 #include <lemon/concept/maps.h> 39 41 40 42 namespace lemon { 41 43 42 44 namespace _reader_bits { 45 46 template <typename Item> 47 class ItemIdReader { 48 public: 49 50 bool isIdReader() { return true; } 51 52 Item readId(std::istream&, Item) { return Item();} 53 54 template <class _ItemIdReader> 55 struct Constraints { 56 void constraints() { 57 bool b = reader.isIdReader(); 58 ignore_unused_variable_warning(b); 59 Item item = reader.readId(is, Item()); 60 } 61 _ItemIdReader& reader; 62 std::istream& is; 63 }; 64 65 }; 43 66 44 67 template <typename T> … … 532 555 typedef _Item Item; 533 556 virtual Item read(std::istream& is) const = 0; 557 virtual bool isIdReader() const = 0; 534 558 }; 535 559 … … 547 571 virtual Item read(std::istream& is) const { 548 572 return boxedIdReader.readId(is, Item()); 573 } 574 575 virtual bool isIdReader() const { 576 return boxedIdReader.isIdReader(); 549 577 } 550 578 }; … … 818 846 const std::string& _id = std::string(), 819 847 const DefaultSkipper& _skipper = DefaultSkipper()) 820 : Parent(_reader), graph(_graph), id(_id), skipper(_skipper), 821 nodeIdReader(new IdReader<Node, NodeIdReader>(_nodeIdReader)) {} 822 848 : Parent(_reader), graph(_graph), id(_id), skipper(_skipper) { 849 checkConcept<_reader_bits::ItemIdReader<Node>, NodeIdReader>(); 850 nodeIdReader.reset(new IdReader<Node, NodeIdReader>(_nodeIdReader)); 851 } 823 852 /// \brief Destructor. 824 853 /// … … 922 951 /// It reads the content of the section. 923 952 virtual void read(std::istream& is) { 953 if (!nodeIdReader->isIdReader()) { 954 throw DataFormatError("Cannot find nodeset or ID map"); 955 } 924 956 std::vector<ReaderBase<Edge>* > index; 925 957 std::string line; … … 1034 1066 const std::string& _id = std::string(), 1035 1067 const DefaultSkipper& _skipper = DefaultSkipper()) 1036 : Parent(_reader), graph(_graph), id(_id), skipper(_skipper), 1037 nodeIdReader(new IdReader<Node, NodeIdReader>(_nodeIdReader)) {} 1038 1068 : Parent(_reader), graph(_graph), id(_id), skipper(_skipper) { 1069 checkConcept<_reader_bits::ItemIdReader<Node>, NodeIdReader>(); 1070 nodeIdReader.reset(new IdReader<Node, NodeIdReader>(_nodeIdReader)); 1071 } 1039 1072 /// \brief Destructor. 1040 1073 /// … … 1198 1231 /// It reads the content of the section. 1199 1232 virtual void read(std::istream& is) { 1233 if (!nodeIdReader->isIdReader()) { 1234 throw DataFormatError("Cannot find nodeset or ID map"); 1235 } 1200 1236 std::vector<ReaderBase<UndirEdge>* > index; 1201 1237 std::string line; … … 1303 1339 NodeReader(LemonReader& _reader, const _IdReader& _idReader, 1304 1340 const std::string& _id = std::string()) 1305 : Parent(_reader), id(_id), 1306 idReader(new IdReader<typename Graph::Node, _IdReader>(_idReader)) {} 1341 : Parent(_reader), id(_id) { 1342 checkConcept<_reader_bits::ItemIdReader<Node>, _IdReader>(); 1343 idReader.reset(new IdReader<Node, _IdReader>(_idReader)); 1344 } 1307 1345 1308 1346 /// \brief Destructor. … … 1348 1386 /// It reads the content of the section. 1349 1387 virtual void read(std::istream& is) { 1388 if (!idReader->isIdReader()) { 1389 throw DataFormatError("Cannot find nodeset or ID map"); 1390 } 1350 1391 std::string line; 1351 1392 while (getline(is, line)) { … … 1395 1436 EdgeReader(LemonReader& _reader, const _IdReader& _idReader, 1396 1437 const std::string& _id = std::string()) 1397 : Parent(_reader), id(_id), 1398 idReader(new IdReader<typename Graph::Edge, _IdReader>(_idReader)) {} 1438 : Parent(_reader), id(_id) { 1439 checkConcept<_reader_bits::ItemIdReader<Edge>, _IdReader>(); 1440 idReader.reset(new IdReader<Edge, _IdReader>(_idReader)); 1441 } 1399 1442 1400 1443 /// \brief Destructor. … … 1439 1482 /// It reads the content of the section. 1440 1483 virtual void read(std::istream& is) { 1484 if (!idReader->isIdReader()) { 1485 throw DataFormatError("Cannot find edgeset or ID map"); 1486 } 1441 1487 std::string line; 1442 1488 while (getline(is, line)) { … … 1488 1534 UndirEdgeReader(LemonReader& _reader, const _IdReader& _idReader, 1489 1535 const std::string& _id = std::string()) 1490 : Parent(_reader), id(_id), 1491 undirEdgeIdReader(new IdReader<UndirEdge, _IdReader>(_idReader)), 1492 edgeIdReader(new IdReader<Edge, _IdReader>(_idReader)) 1493 {} 1536 : Parent(_reader), id(_id) { 1537 checkConcept<_reader_bits::ItemIdReader<UndirEdge>, _IdReader>(); 1538 checkConcept<_reader_bits::ItemIdReader<Edge>, _IdReader>(); 1539 undirEdgeIdReader.reset(new IdReader<UndirEdge, _IdReader>(_idReader)); 1540 egdeIdReader.reset(new IdReader<Edge, _IdReader>(_idReader)); 1541 } 1494 1542 1495 1543 /// \brief Destructor. … … 1546 1594 /// It reads the content of the section. 1547 1595 virtual void read(std::istream& is) { 1596 if (!edgeIdReader->isIdReader()) { 1597 throw DataFormatError("Cannot find undirected edgeset or ID map"); 1598 } 1599 if (!undirEdgeIdReader->isIdReader()) { 1600 throw DataFormatError("Cannot find undirected edgeset or ID map"); 1601 } 1548 1602 std::string line; 1549 1603 while (getline(is, line)) {
Note: See TracChangeset
for help on using the changeset viewer.