lemon/lemon_writer.h
changeset 1492 0d58f0301923
parent 1476 182da222fceb
child 1494 ae55ba000ebb
     1.1 --- a/lemon/lemon_writer.h	Tue Jun 14 23:21:31 2005 +0000
     1.2 +++ b/lemon/lemon_writer.h	Wed Jun 15 10:10:59 2005 +0000
     1.3 @@ -55,13 +55,31 @@
     1.4        template <class _ItemIdWriter>
     1.5        struct Constraints {
     1.6  	void constraints() {
     1.7 -	  const Item item;
     1.8  	  bool b = writer.isIdWriter();
     1.9  	  ignore_unused_variable_warning(b);
    1.10  	  writer.writeId(os, item);
    1.11  	}
    1.12  	_ItemIdWriter& writer;
    1.13  	std::ostream& os;
    1.14 +	const Item& item;
    1.15 +      };
    1.16 +
    1.17 +    };
    1.18 +
    1.19 +    template <typename Item>
    1.20 +    class ItemWriter {
    1.21 +    public:
    1.22 +
    1.23 +      void write(std::ostream&, const Item&) {}
    1.24 +      
    1.25 +      template <class _ItemWriter>
    1.26 +      struct Constraints {
    1.27 +	void constraints() {
    1.28 +	  writer.write(os, item);
    1.29 +	}
    1.30 +	_ItemWriter& writer;
    1.31 +	std::ostream& os;
    1.32 +	const Item& item;
    1.33        };
    1.34  
    1.35      };
    1.36 @@ -352,7 +370,8 @@
    1.37      template <typename Writer, typename Map>
    1.38      NodeSetWriter& writeNodeMap(std::string name, const Map& map, 
    1.39  			    const Writer& writer = Writer()) {
    1.40 -      checkConcept<concept::WriteMap<Node, typename Map::Value>, Map>();
    1.41 +      checkConcept<concept::ReadMap<Node, typename Map::Value>, Map>();
    1.42 +      checkConcept<_writer_bits::ItemWriter<typename Map::Value>, Writer>();
    1.43        writers.push_back(
    1.44  	make_pair(name, new MapWriter<Node, Map, Writer>(map, writer)));
    1.45        return *this;
    1.46 @@ -517,7 +536,8 @@
    1.47      template <typename Writer, typename Map>
    1.48      EdgeSetWriter& writeEdgeMap(std::string name, const Map& map, 
    1.49  			    const Writer& writer = Writer()) {
    1.50 -      checkConcept<concept::WriteMap<Edge, typename Map::Value>, Map>();
    1.51 +      checkConcept<concept::ReadMap<Edge, typename Map::Value>, Map>();
    1.52 +      checkConcept<_writer_bits::ItemWriter<typename Map::Value>, Writer>();
    1.53        writers.push_back(
    1.54  	make_pair(name, new MapWriter<Edge, Map, Writer>(map, writer)));
    1.55        return *this;
    1.56 @@ -698,7 +718,8 @@
    1.57      template <typename Writer, typename Map>
    1.58      UndirEdgeSetWriter& writeUndirEdgeMap(std::string name, const Map& map, 
    1.59  					  const Writer& writer = Writer()) {
    1.60 -      checkConcept<concept::WriteMap<UndirEdge, typename Map::Value>, Map>();
    1.61 +      checkConcept<concept::ReadMap<UndirEdge, typename Map::Value>, Map>();
    1.62 +      checkConcept<_writer_bits::ItemWriter<typename Map::Value>, Writer>();
    1.63        writers.push_back(
    1.64  	make_pair(name, new MapWriter<UndirEdge, Map, Writer>(map, writer)));
    1.65        return *this;
    1.66 @@ -709,10 +730,8 @@
    1.67      /// Add a new directed map writer command for the writer.
    1.68      template <typename Map>
    1.69      UndirEdgeSetWriter& writeEdgeMap(std::string name, const Map& map) {
    1.70 -      checkConcept<concept::WriteMap<Edge, typename Map::Value>, Map>();
    1.71 -      writeUndirEdgeMap("+" + name, composeMap(forwardMap(graph), map));
    1.72 -      writeUndirEdgeMap("-" + name, composeMap(backwardMap(graph), map));
    1.73 -      return *this;
    1.74 +      return writeEdgeMap<typename Traits::
    1.75 +	template Writer<typename Map::Value>, Map>(name, map);
    1.76      }
    1.77  
    1.78      /// \brief Add a new directed map writer command for the writer.
    1.79 @@ -721,7 +740,8 @@
    1.80      template <typename Writer, typename Map>
    1.81      UndirEdgeSetWriter& writeEdgeMap(std::string name, const Map& map, 
    1.82  				     const Writer& writer = Writer()) {
    1.83 -      checkConcept<concept::WriteMap<Edge, typename Map::Value>, Map>();
    1.84 +      checkConcept<concept::ReadMap<Edge, typename Map::Value>, Map>();
    1.85 +      checkConcept<_writer_bits::ItemWriter<typename Map::Value>, Writer>();
    1.86        writeUndirEdge("+" + name, composeMap(forwardMap(graph), map), writer);
    1.87        writeUndirEdge("-" + name, composeMap(backwardMap(graph), map), writer);
    1.88        return *this;
    1.89 @@ -1160,6 +1180,7 @@
    1.90      AttributeWriter& writeAttribute(const std::string& name, 
    1.91  				    const Value& value,
    1.92  				    const Writer& writer = Writer()) {
    1.93 +      checkConcept<_writer_bits::ItemWriter<Value>, Writer>();
    1.94        writers.push_back(make_pair(name, new ValueWriter<Value, Writer>
    1.95        			       (value, writer)));
    1.96        return *this;