lemon/lemon_reader.h
changeset 2386 81b47fc5c444
parent 2368 6b2e8b734ae7
child 2391 14a343be7a5a
     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