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;