1.1 --- a/lemon/lemon_reader.h Fri Mar 02 17:56:22 2007 +0000
1.2 +++ b/lemon/lemon_reader.h Fri Mar 02 18:04:28 2007 +0000
1.3 @@ -533,7 +533,7 @@
1.4
1.5 virtual std::streambuf* setbuf(char *buf, std::streamsize len) {
1.6 if (base()) return 0;
1.7 - if (buf != 0 && len >= (int)sizeof(small_buf)) {
1.8 + if (buf != 0 && len >= int(sizeof(small_buf))) {
1.9 setb(buf, len);
1.10 } else {
1.11 setb(small_buf, sizeof(small_buf));
1.12 @@ -709,8 +709,8 @@
1.13 char buf[2048];
1.14 FilterStreamBuf buffer(*is, line_num);
1.15 buffer.pubsetbuf(buf, sizeof(buf));
1.16 - std::istream is(&buffer);
1.17 - it->first->read(is);
1.18 + std::istream ss(&buffer);
1.19 + it->first->read(ss);
1.20 break;
1.21 }
1.22 }
1.23 @@ -797,51 +797,51 @@
1.24 ///
1.25 /// Add a new node map reader command for the reader.
1.26 template <typename Map>
1.27 - NodeSetReader& readNodeMap(std::string name, Map& map) {
1.28 + NodeSetReader& readNodeMap(std::string label, Map& map) {
1.29 return _readMap<
1.30 typename Traits::template Reader<typename Map::Value>, Map,
1.31 - typename _reader_bits::Arg<Map>::Type>(name, map);
1.32 + typename _reader_bits::Arg<Map>::Type>(label, map);
1.33 }
1.34
1.35 template <typename Map>
1.36 - NodeSetReader& readNodeMap(std::string name, const Map& map) {
1.37 + NodeSetReader& readNodeMap(std::string label, const Map& map) {
1.38 return _readMap<
1.39 typename Traits::template Reader<typename Map::Value>, Map,
1.40 - typename _reader_bits::Arg<Map>::Type>(name, map);
1.41 + typename _reader_bits::Arg<Map>::Type>(label, map);
1.42 }
1.43
1.44 /// \brief Add a new node map reader command for the reader.
1.45 ///
1.46 /// Add a new node map reader command for the reader.
1.47 - template <typename Reader, typename Map>
1.48 - NodeSetReader& readNodeMap(std::string name, Map& map,
1.49 - const Reader& reader = Reader()) {
1.50 - return _readMap<Reader, Map, typename _reader_bits::Arg<Map>::Type>
1.51 - (name, map, reader);
1.52 + template <typename ItemReader, typename Map>
1.53 + NodeSetReader& readNodeMap(std::string label, Map& map,
1.54 + const ItemReader& ir = ItemReader()) {
1.55 + return _readMap<ItemReader, Map, typename _reader_bits::Arg<Map>::Type>
1.56 + (label, map, ir);
1.57 }
1.58
1.59 - template <typename Reader, typename Map>
1.60 - NodeSetReader& readNodeMap(std::string name, const Map& map,
1.61 - const Reader& reader = Reader()) {
1.62 - return _readMap<Reader, Map, typename _reader_bits::Arg<Map>::Type>
1.63 - (name, map, reader);
1.64 + template <typename ItemReader, typename Map>
1.65 + NodeSetReader& readNodeMap(std::string label, const Map& map,
1.66 + const ItemReader& ir = ItemReader()) {
1.67 + return _readMap<ItemReader, Map, typename _reader_bits::Arg<Map>::Type>
1.68 + (label, map, ir);
1.69 }
1.70
1.71 private:
1.72
1.73 - template <typename Reader, typename Map, typename MapParameter>
1.74 - NodeSetReader& _readMap(std::string name, MapParameter map,
1.75 - const Reader& reader = Reader()) {
1.76 + template <typename ItemReader, typename Map, typename MapParameter>
1.77 + NodeSetReader& _readMap(std::string label, MapParameter map,
1.78 + const ItemReader& ir = ItemReader()) {
1.79 checkConcept<concepts::WriteMap<Node, typename Map::Value>, Map>();
1.80 - checkConcept<_reader_bits::ItemReader<typename Map::Value>, Reader>();
1.81 - if (readers.find(name) != readers.end()) {
1.82 + checkConcept<_reader_bits::ItemReader<typename Map::Value>, ItemReader>();
1.83 + if (readers.find(label) != readers.end()) {
1.84 ErrorMessage msg;
1.85 - msg << "Multiple read rule for node map: " << name;
1.86 + msg << "Multiple read rule for node map: " << label;
1.87 throw IoParameterError(msg.message());
1.88 }
1.89 readers.insert(
1.90 - make_pair(name, new _reader_bits::
1.91 - MapReader<Node, Map, Reader>(map, reader)));
1.92 + make_pair(label, new _reader_bits::
1.93 + MapReader<Node, Map, ItemReader>(map, ir)));
1.94 return *this;
1.95 }
1.96
1.97 @@ -850,16 +850,16 @@
1.98 /// \brief Add a new node map skipper command for the reader.
1.99 ///
1.100 /// Add a new node map skipper command for the reader.
1.101 - template <typename Reader>
1.102 - NodeSetReader& skipNodeMap(std::string name,
1.103 - const Reader& reader = Reader()) {
1.104 - if (readers.find(name) != readers.end()) {
1.105 + template <typename ItemReader>
1.106 + NodeSetReader& skipNodeMap(std::string label,
1.107 + const ItemReader& ir = ItemReader()) {
1.108 + if (readers.find(label) != readers.end()) {
1.109 ErrorMessage msg;
1.110 - msg << "Multiple read rule for node map: " << name;
1.111 + msg << "Multiple read rule for node map: " << label;
1.112 throw IoParameterError(msg.message());
1.113 }
1.114 - readers.insert(make_pair(name, new _reader_bits::
1.115 - SkipReader<Node, Reader>(reader)));
1.116 + readers.insert(make_pair(label, new _reader_bits::
1.117 + SkipReader<Node, ItemReader>(ir)));
1.118 return *this;
1.119 }
1.120
1.121 @@ -885,21 +885,23 @@
1.122 std::vector<_reader_bits::MapReaderBase<Node>* > index;
1.123 std::string line;
1.124
1.125 - getline(is, line);
1.126 - std::istringstream ls(line);
1.127 - std::string id;
1.128 - while (ls >> id) {
1.129 - typename MapReaders::iterator it = readers.find(id);
1.130 - if (it != readers.end()) {
1.131 - it->second->touch();
1.132 - index.push_back(it->second);
1.133 - } else {
1.134 - index.push_back(&skipper);
1.135 - }
1.136 - if (id == "label") {
1.137 - inverter.reset(index.back()->getInverter());
1.138 - index.back() = inverter.get();
1.139 - }
1.140 + {
1.141 + getline(is, line);
1.142 + std::istringstream ls(line);
1.143 + std::string id;
1.144 + while (ls >> id) {
1.145 + typename MapReaders::iterator it = readers.find(id);
1.146 + if (it != readers.end()) {
1.147 + it->second->touch();
1.148 + index.push_back(it->second);
1.149 + } else {
1.150 + index.push_back(&skipper);
1.151 + }
1.152 + if (id == "label") {
1.153 + inverter.reset(index.back()->getInverter());
1.154 + index.back() = inverter.get();
1.155 + }
1.156 + }
1.157 }
1.158 for (typename MapReaders::iterator it = readers.begin();
1.159 it != readers.end(); ++it) {
1.160 @@ -912,7 +914,7 @@
1.161 while (getline(is, line)) {
1.162 Node node = graph.addNode();
1.163 std::istringstream ls(line);
1.164 - for (int i = 0; i < (int)index.size(); ++i) {
1.165 + for (int i = 0; i < int(index.size()); ++i) {
1.166 index[i]->read(ls, node);
1.167 }
1.168 }
1.169 @@ -1027,51 +1029,51 @@
1.170 ///
1.171 /// Add a new edge map reader command for the reader.
1.172 template <typename Map>
1.173 - EdgeSetReader& readEdgeMap(std::string name, Map& map) {
1.174 + EdgeSetReader& readEdgeMap(std::string label, Map& map) {
1.175 return _readMap<
1.176 typename Traits::template Reader<typename Map::Value>, Map,
1.177 - typename _reader_bits::Arg<Map>::Type>(name, map);
1.178 + typename _reader_bits::Arg<Map>::Type>(label, map);
1.179 }
1.180
1.181 template <typename Map>
1.182 - EdgeSetReader& readEdgeMap(std::string name, const Map& map) {
1.183 + EdgeSetReader& readEdgeMap(std::string label, const Map& map) {
1.184 return _readMap<
1.185 typename Traits::template Reader<typename Map::Value>, Map,
1.186 - typename _reader_bits::Arg<Map>::Type>(name, map);
1.187 + typename _reader_bits::Arg<Map>::Type>(label, map);
1.188 }
1.189
1.190 /// \brief Add a new edge map reader command for the reader.
1.191 ///
1.192 /// Add a new edge map reader command for the reader.
1.193 - template <typename Reader, typename Map>
1.194 - EdgeSetReader& readEdgeMap(std::string name, Map& map,
1.195 - const Reader& reader = Reader()) {
1.196 - return _readMap<Reader, Map,
1.197 - typename _reader_bits::Arg<Map>::Type>(name, map, reader);
1.198 + template <typename ItemReader, typename Map>
1.199 + EdgeSetReader& readEdgeMap(std::string label, Map& map,
1.200 + const ItemReader& ir = ItemReader()) {
1.201 + return _readMap<ItemReader, Map,
1.202 + typename _reader_bits::Arg<Map>::Type>(label, map, ir);
1.203 }
1.204
1.205 - template <typename Reader, typename Map>
1.206 - EdgeSetReader& readEdgeMap(std::string name, const Map& map,
1.207 - const Reader& reader = Reader()) {
1.208 - return _readMap<Reader, Map,
1.209 - typename _reader_bits::Arg<Map>::Type>(name, map, reader);
1.210 + template <typename ItemReader, typename Map>
1.211 + EdgeSetReader& readEdgeMap(std::string label, const Map& map,
1.212 + const ItemReader& ir = ItemReader()) {
1.213 + return _readMap<ItemReader, Map,
1.214 + typename _reader_bits::Arg<Map>::Type>(label, map, ir);
1.215 }
1.216
1.217 private:
1.218
1.219 - template <typename Reader, typename Map, typename MapParameter>
1.220 - EdgeSetReader& _readMap(std::string name, MapParameter map,
1.221 - const Reader& reader = Reader()) {
1.222 + template <typename ItemReader, typename Map, typename MapParameter>
1.223 + EdgeSetReader& _readMap(std::string label, MapParameter map,
1.224 + const ItemReader& ir = ItemReader()) {
1.225 checkConcept<concepts::WriteMap<Edge, typename Map::Value>, Map>();
1.226 - checkConcept<_reader_bits::ItemReader<typename Map::Value>, Reader>();
1.227 - if (readers.find(name) != readers.end()) {
1.228 + checkConcept<_reader_bits::ItemReader<typename Map::Value>, ItemReader>();
1.229 + if (readers.find(label) != readers.end()) {
1.230 ErrorMessage msg;
1.231 - msg << "Multiple read rule for edge map: " << name;
1.232 + msg << "Multiple read rule for edge map: " << label;
1.233 throw IoParameterError(msg.message());
1.234 }
1.235 readers.insert(
1.236 - make_pair(name, new _reader_bits::
1.237 - MapReader<Edge, Map, Reader>(map, reader)));
1.238 + make_pair(label, new _reader_bits::
1.239 + MapReader<Edge, Map, ItemReader>(map, ir)));
1.240 return *this;
1.241 }
1.242
1.243 @@ -1080,16 +1082,16 @@
1.244 /// \brief Add a new edge map skipper command for the reader.
1.245 ///
1.246 /// Add a new edge map skipper command for the reader.
1.247 - template <typename Reader>
1.248 - EdgeSetReader& skipEdgeMap(std::string name,
1.249 - const Reader& reader = Reader()) {
1.250 - if (readers.find(name) != readers.end()) {
1.251 + template <typename ItemReader>
1.252 + EdgeSetReader& skipEdgeMap(std::string label,
1.253 + const ItemReader& ir = ItemReader()) {
1.254 + if (readers.find(label) != readers.end()) {
1.255 ErrorMessage msg;
1.256 - msg << "Multiple read rule for edge map: " << name;
1.257 + msg << "Multiple read rule for edge map: " << label;
1.258 throw IoParameterError(msg.message());
1.259 }
1.260 - readers.insert(make_pair(name, new _reader_bits::
1.261 - SkipReader<Edge, Reader>(reader)));
1.262 + readers.insert(make_pair(label, new _reader_bits::
1.263 + SkipReader<Edge, ItemReader>(ir)));
1.264 return *this;
1.265 }
1.266
1.267 @@ -1118,21 +1120,23 @@
1.268 std::vector<_reader_bits::MapReaderBase<Edge>* > index;
1.269 std::string line;
1.270
1.271 - getline(is, line);
1.272 - std::istringstream ls(line);
1.273 - std::string id;
1.274 - while (ls >> id) {
1.275 - typename MapReaders::iterator it = readers.find(id);
1.276 - if (it != readers.end()) {
1.277 - index.push_back(it->second);
1.278 - it->second->touch();
1.279 - } else {
1.280 - index.push_back(&skipper);
1.281 - }
1.282 - if (id == "label") {
1.283 - inverter.reset(index.back()->getInverter());
1.284 - index.back() = inverter.get();
1.285 - }
1.286 + {
1.287 + getline(is, line);
1.288 + std::istringstream ls(line);
1.289 + std::string id;
1.290 + while (ls >> id) {
1.291 + typename MapReaders::iterator it = readers.find(id);
1.292 + if (it != readers.end()) {
1.293 + index.push_back(it->second);
1.294 + it->second->touch();
1.295 + } else {
1.296 + index.push_back(&skipper);
1.297 + }
1.298 + if (id == "label") {
1.299 + inverter.reset(index.back()->getInverter());
1.300 + index.back() = inverter.get();
1.301 + }
1.302 + }
1.303 }
1.304 for (typename MapReaders::iterator it = readers.begin();
1.305 it != readers.end(); ++it) {
1.306 @@ -1147,7 +1151,7 @@
1.307 Node from = nodeLabelReader->read(ls);
1.308 Node to = nodeLabelReader->read(ls);
1.309 Edge edge = graph.addEdge(from, to);
1.310 - for (int i = 0; i < (int)index.size(); ++i) {
1.311 + for (int i = 0; i < int(index.size()); ++i) {
1.312 index[i]->read(ls, edge);
1.313 }
1.314 }
1.315 @@ -1271,51 +1275,51 @@
1.316 ///
1.317 /// Add a new edge undirected map reader command for the reader.
1.318 template <typename Map>
1.319 - UEdgeSetReader& readUEdgeMap(std::string name, Map& map) {
1.320 + UEdgeSetReader& readUEdgeMap(std::string label, Map& map) {
1.321 return _readMap<
1.322 typename Traits::template Reader<typename Map::Value>, Map,
1.323 - typename _reader_bits::Arg<Map>::Type>(name, map);
1.324 + typename _reader_bits::Arg<Map>::Type>(label, map);
1.325 }
1.326
1.327 template <typename Map>
1.328 - UEdgeSetReader& readUEdgeMap(std::string name, const Map& map) {
1.329 + UEdgeSetReader& readUEdgeMap(std::string label, const Map& map) {
1.330 return _readMap<
1.331 typename Traits::template Reader<typename Map::Value>, Map,
1.332 - typename _reader_bits::Arg<Map>::Type>(name, map);
1.333 + typename _reader_bits::Arg<Map>::Type>(label, map);
1.334 }
1.335
1.336 /// \brief Add a new undirected edge map reader command for the reader.
1.337 ///
1.338 /// Add a new edge undirected map reader command for the reader.
1.339 - template <typename Reader, typename Map>
1.340 - UEdgeSetReader& readUEdgeMap(std::string name, Map& map,
1.341 - const Reader& reader = Reader()) {
1.342 - return _readMap<Reader, Map, typename _reader_bits::Arg<Map>::Type>
1.343 - (name, map, reader);
1.344 + template <typename ItemReader, typename Map>
1.345 + UEdgeSetReader& readUEdgeMap(std::string label, Map& map,
1.346 + const ItemReader& ir = ItemReader()) {
1.347 + return _readMap<ItemReader, Map, typename _reader_bits::Arg<Map>::Type>
1.348 + (label, map, ir);
1.349 }
1.350
1.351 - template <typename Reader, typename Map>
1.352 - UEdgeSetReader& readUEdgeMap(std::string name, const Map& map,
1.353 - const Reader& reader = Reader()) {
1.354 - return _readMap<Reader, Map, typename _reader_bits::Arg<Map>::Type >
1.355 - (name, map, reader);
1.356 + template <typename ItemReader, typename Map>
1.357 + UEdgeSetReader& readUEdgeMap(std::string label, const Map& map,
1.358 + const ItemReader& ir = ItemReader()) {
1.359 + return _readMap<ItemReader, Map, typename _reader_bits::Arg<Map>::Type >
1.360 + (label, map, ir);
1.361 }
1.362
1.363 private:
1.364
1.365 - template <typename Reader, typename Map, typename MapParameter>
1.366 - UEdgeSetReader& _readMap(std::string name, MapParameter map,
1.367 - const Reader& reader = Reader()) {
1.368 + template <typename ItemReader, typename Map, typename MapParameter>
1.369 + UEdgeSetReader& _readMap(std::string label, MapParameter map,
1.370 + const ItemReader& ir = ItemReader()) {
1.371 checkConcept<concepts::WriteMap<UEdge, typename Map::Value>, Map>();
1.372 - checkConcept<_reader_bits::ItemReader<typename Map::Value>, Reader>();
1.373 - if (readers.find(name) != readers.end()) {
1.374 + checkConcept<_reader_bits::ItemReader<typename Map::Value>, ItemReader>();
1.375 + if (readers.find(label) != readers.end()) {
1.376 ErrorMessage msg;
1.377 - msg << "Multiple read rule for edge map: " << name;
1.378 + msg << "Multiple read rule for edge map: " << label;
1.379 throw IoParameterError(msg.message());
1.380 }
1.381 readers.insert(
1.382 - make_pair(name, new _reader_bits::
1.383 - MapReader<UEdge, Map, Reader>(map, reader)));
1.384 + make_pair(label, new _reader_bits::
1.385 + MapReader<UEdge, Map, ItemReader>(map, ir)));
1.386 return *this;
1.387 }
1.388
1.389 @@ -1324,16 +1328,16 @@
1.390 /// \brief Add a new undirected edge map skipper command for the reader.
1.391 ///
1.392 /// Add a new undirected edge map skipper command for the reader.
1.393 - template <typename Reader>
1.394 - UEdgeSetReader& skipUEdgeMap(std::string name,
1.395 - const Reader& reader = Reader()) {
1.396 - if (readers.find(name) != readers.end()) {
1.397 + template <typename ItemReader>
1.398 + UEdgeSetReader& skipUEdgeMap(std::string label,
1.399 + const ItemReader& ir = ItemReader()) {
1.400 + if (readers.find(label) != readers.end()) {
1.401 ErrorMessage msg;
1.402 - msg << "Multiple read rule for node map: " << name;
1.403 + msg << "Multiple read rule for node map: " << label;
1.404 throw IoParameterError(msg.message());
1.405 }
1.406 - readers.insert(make_pair(name, new _reader_bits::
1.407 - SkipReader<UEdge, Reader>(reader)));
1.408 + readers.insert(make_pair(label, new _reader_bits::
1.409 + SkipReader<UEdge, ItemReader>(ir)));
1.410 return *this;
1.411 }
1.412
1.413 @@ -1341,47 +1345,47 @@
1.414 ///
1.415 /// Add a new directed edge map reader command for the reader.
1.416 template <typename Map>
1.417 - UEdgeSetReader& readEdgeMap(std::string name, Map& map) {
1.418 + UEdgeSetReader& readEdgeMap(std::string label, Map& map) {
1.419 return _readDirMap<
1.420 typename Traits::template Reader<typename Map::Value>, Map,
1.421 - typename _reader_bits::Arg<Map>::Type>(name, map);
1.422 + typename _reader_bits::Arg<Map>::Type>(label, map);
1.423 }
1.424
1.425 template <typename Map>
1.426 - UEdgeSetReader& readEdgeMap(std::string name, const Map& map) {
1.427 + UEdgeSetReader& readEdgeMap(std::string label, const Map& map) {
1.428 return _readDirMap<
1.429 typename Traits::template Reader<typename Map::Value>, Map,
1.430 - typename _reader_bits::Arg<Map>::Type>(name, map);
1.431 + typename _reader_bits::Arg<Map>::Type>(label, map);
1.432 }
1.433
1.434 /// \brief Add a new directed edge map reader command for the reader.
1.435 ///
1.436 /// Add a new directed edge map reader command for the reader.
1.437 - template <typename Reader, typename Map>
1.438 - UEdgeSetReader& readEdgeMap(std::string name, Map& map,
1.439 - const Reader& reader = Reader()) {
1.440 - return _readDirMap<Reader, Map, typename _reader_bits::Arg<Map>::Type>
1.441 - (name, map, reader);
1.442 + template <typename ItemReader, typename Map>
1.443 + UEdgeSetReader& readEdgeMap(std::string label, Map& map,
1.444 + const ItemReader& ir = ItemReader()) {
1.445 + return _readDirMap<ItemReader, Map,
1.446 + typename _reader_bits::Arg<Map>::Type>(label, map, ir);
1.447 }
1.448
1.449 - template <typename Reader, typename Map>
1.450 - UEdgeSetReader& readEdgeMap(std::string name, const Map& map,
1.451 - const Reader& reader = Reader()) {
1.452 - return _readDirMap<Reader, Map, typename _reader_bits::Arg<Map>::Type>
1.453 - (name, map, reader);
1.454 + template <typename ItemReader, typename Map>
1.455 + UEdgeSetReader& readEdgeMap(std::string label, const Map& map,
1.456 + const ItemReader& ir = ItemReader()) {
1.457 + return _readDirMap<ItemReader, Map,
1.458 + typename _reader_bits::Arg<Map>::Type>(label, map, ir);
1.459 }
1.460
1.461 private:
1.462
1.463 - template <typename Reader, typename Map, typename MapParameter>
1.464 - UEdgeSetReader& _readDirMap(std::string name, MapParameter map,
1.465 - const Reader& reader = Reader()) {
1.466 - checkConcept<_reader_bits::ItemReader<typename Map::Value>, Reader>();
1.467 + template <typename ItemReader, typename Map, typename MapParameter>
1.468 + UEdgeSetReader& _readDirMap(std::string label, MapParameter map,
1.469 + const ItemReader& ir = ItemReader()) {
1.470 + checkConcept<_reader_bits::ItemReader<typename Map::Value>, ItemReader>();
1.471 checkConcept<concepts::WriteMap<Edge, typename Map::Value>, Map>();
1.472 - readUEdgeMap("+" + name,
1.473 - _reader_bits::forwardComposeMap(graph, map), reader);
1.474 - readUEdgeMap("-" + name,
1.475 - _reader_bits::backwardComposeMap(graph, map), reader);
1.476 + readUEdgeMap("+" + label,
1.477 + _reader_bits::forwardComposeMap(graph, map), ir);
1.478 + readUEdgeMap("-" + label,
1.479 + _reader_bits::backwardComposeMap(graph, map), ir);
1.480 return *this;
1.481 }
1.482
1.483 @@ -1390,11 +1394,11 @@
1.484 /// \brief Add a new directed edge map skipper command for the reader.
1.485 ///
1.486 /// Add a new directed edge map skipper command for the reader.
1.487 - template <typename Reader>
1.488 - UEdgeSetReader& skipEdgeMap(std::string name,
1.489 - const Reader& reader = Reader()) {
1.490 - skipUEdgeMap("+" + name, reader);
1.491 - skipUEdgeMap("-" + name, reader);
1.492 + template <typename ItemReader>
1.493 + UEdgeSetReader& skipEdgeMap(std::string label,
1.494 + const ItemReader& ir = ItemReader()) {
1.495 + skipUEdgeMap("+" + label, ir);
1.496 + skipUEdgeMap("-" + label, ir);
1.497 return *this;
1.498 }
1.499
1.500 @@ -1423,36 +1427,38 @@
1.501 std::vector<_reader_bits::MapReaderBase<UEdge>* > index;
1.502 std::string line;
1.503
1.504 - getline(is, line);
1.505 - std::istringstream ls(line);
1.506 - std::string id;
1.507 - while (ls >> id) {
1.508 - typename MapReaders::iterator it = readers.find(id);
1.509 - if (it != readers.end()) {
1.510 - index.push_back(it->second);
1.511 - it->second->touch();
1.512 - } else {
1.513 - index.push_back(&skipper);
1.514 - }
1.515 - if (id == "label") {
1.516 - inverter.reset(index.back()->getInverter());
1.517 - index.back() = inverter.get();
1.518 - }
1.519 - }
1.520 - for (typename MapReaders::iterator it = readers.begin();
1.521 - it != readers.end(); ++it) {
1.522 - if (!it->second->touched()) {
1.523 - ErrorMessage msg;
1.524 - msg << "Map not found in file: " << it->first;
1.525 - throw IoParameterError(msg.message());
1.526 - }
1.527 + {
1.528 + getline(is, line);
1.529 + std::istringstream ls(line);
1.530 + std::string id;
1.531 + while (ls >> id) {
1.532 + typename MapReaders::iterator it = readers.find(id);
1.533 + if (it != readers.end()) {
1.534 + index.push_back(it->second);
1.535 + it->second->touch();
1.536 + } else {
1.537 + index.push_back(&skipper);
1.538 + }
1.539 + if (id == "label") {
1.540 + inverter.reset(index.back()->getInverter());
1.541 + index.back() = inverter.get();
1.542 + }
1.543 + }
1.544 + for (typename MapReaders::iterator it = readers.begin();
1.545 + it != readers.end(); ++it) {
1.546 + if (!it->second->touched()) {
1.547 + ErrorMessage msg;
1.548 + msg << "Map not found in file: " << it->first;
1.549 + throw IoParameterError(msg.message());
1.550 + }
1.551 + }
1.552 }
1.553 while (getline(is, line)) {
1.554 std::istringstream ls(line);
1.555 Node from = nodeLabelReader->read(ls);
1.556 Node to = nodeLabelReader->read(ls);
1.557 UEdge edge = graph.addEdge(from, to);
1.558 - for (int i = 0; i < (int)index.size(); ++i) {
1.559 + for (int i = 0; i < int(index.size()); ++i) {
1.560 index[i]->read(ls, edge);
1.561 }
1.562 }
1.563 @@ -1563,13 +1569,13 @@
1.564 /// \brief Add a node reader command for the NodeReader.
1.565 ///
1.566 /// Add a node reader command for the NodeReader.
1.567 - void readNode(const std::string& name, Node& item) {
1.568 - if (readers.find(name) != readers.end()) {
1.569 + void readNode(std::string label, Node& item) {
1.570 + if (readers.find(label) != readers.end()) {
1.571 ErrorMessage msg;
1.572 - msg << "Multiple read rule for node: " << name;
1.573 + msg << "Multiple read rule for node: " << label;
1.574 throw IoParameterError(msg.message());
1.575 }
1.576 - readers.insert(make_pair(name, _reader_bits::ItemStore<Node>(item)));
1.577 + readers.insert(make_pair(label, _reader_bits::ItemStore<Node>(item)));
1.578 }
1.579
1.580 protected:
1.581 @@ -1676,13 +1682,13 @@
1.582 /// \brief Add an edge reader command for the EdgeReader.
1.583 ///
1.584 /// Add an edge reader command for the EdgeReader.
1.585 - void readEdge(const std::string& name, Edge& item) {
1.586 - if (readers.find(name) != readers.end()) {
1.587 + void readEdge(std::string label, Edge& item) {
1.588 + if (readers.find(label) != readers.end()) {
1.589 ErrorMessage msg;
1.590 - msg << "Multiple read rule for edge: " << name;
1.591 + msg << "Multiple read rule for edge: " << label;
1.592 throw IoParameterError(msg.message());
1.593 }
1.594 - readers.insert(make_pair(name, _reader_bits::ItemStore<Edge>(item)));
1.595 + readers.insert(make_pair(label, _reader_bits::ItemStore<Edge>(item)));
1.596 }
1.597
1.598 protected:
1.599 @@ -1794,26 +1800,26 @@
1.600 /// \brief Add an undirected edge reader command for the UEdgeReader.
1.601 ///
1.602 /// Add an undirected edge reader command for the UEdgeReader.
1.603 - void readUEdge(const std::string& name, UEdge& item) {
1.604 - if (uEdgeReaders.find(name) != uEdgeReaders.end()) {
1.605 + void readUEdge(std::string label, UEdge& item) {
1.606 + if (uEdgeReaders.find(label) != uEdgeReaders.end()) {
1.607 ErrorMessage msg;
1.608 - msg << "Multiple read rule for undirected edge: " << name;
1.609 + msg << "Multiple read rule for undirected edge: " << label;
1.610 throw IoParameterError(msg.message());
1.611 }
1.612 - uEdgeReaders.insert(make_pair(name, _reader_bits::
1.613 + uEdgeReaders.insert(make_pair(label, _reader_bits::
1.614 ItemStore<UEdge>(item)));
1.615 }
1.616
1.617 /// \brief Add an edge reader command for the UEdgeReader.
1.618 ///
1.619 /// Add an edge reader command for the UEdgeReader.
1.620 - void readEdge(const std::string& name, Edge& item) {
1.621 - if (edgeReaders.find(name) != edgeReaders.end()) {
1.622 + void readEdge(std::string label, Edge& item) {
1.623 + if (edgeReaders.find(label) != edgeReaders.end()) {
1.624 ErrorMessage msg;
1.625 - msg << "Multiple read rule for edge: " << name;
1.626 + msg << "Multiple read rule for edge: " << label;
1.627 throw IoParameterError(msg.message());
1.628 }
1.629 - edgeReaders.insert(make_pair(name, _reader_bits::ItemStore<Edge>(item)));
1.630 + edgeReaders.insert(make_pair(label, _reader_bits::ItemStore<Edge>(item)));
1.631 }
1.632
1.633 protected:
1.634 @@ -1953,17 +1959,17 @@
1.635 /// \brief Add an attribute reader command for the reader.
1.636 ///
1.637 /// Add an attribute reader command for the reader.
1.638 - template <typename Reader, typename Value>
1.639 - AttributeReader& readAttribute(const std::string& name, Value& value,
1.640 - const Reader& reader = Reader()) {
1.641 - checkConcept<_reader_bits::ItemReader<Value>, Reader>();
1.642 - if (readers.find(name) != readers.end()) {
1.643 + template <typename ItemReader, typename Value>
1.644 + AttributeReader& readAttribute(std::string label, Value& value,
1.645 + const ItemReader& ir = ItemReader()) {
1.646 + checkConcept<_reader_bits::ItemReader<Value>, ItemReader>();
1.647 + if (readers.find(label) != readers.end()) {
1.648 ErrorMessage msg;
1.649 - msg << "Multiple read rule for attribute: " << name;
1.650 + msg << "Multiple read rule for attribute: " << label;
1.651 throw IoParameterError(msg.message());
1.652 }
1.653 - readers.insert(make_pair(name, new _reader_bits::
1.654 - ValueReader<Value, Reader>(value, reader)));
1.655 + readers.insert(make_pair(label, new _reader_bits::
1.656 + ValueReader<Value, ItemReader>(value, ir)));
1.657 return *this;
1.658 }
1.659