[Lemon-commits] [lemon_svn] deba: r2232 - hugo/trunk/lemon
Lemon SVN
svn at lemon.cs.elte.hu
Mon Nov 6 20:51:07 CET 2006
Author: deba
Date: Wed Oct 5 15:18:51 2005
New Revision: 2232
Modified:
hugo/trunk/lemon/graph_reader.h
hugo/trunk/lemon/lemon_reader.h
hugo/trunk/lemon/lemon_writer.h
hugo/trunk/lemon/maps.h
hugo/trunk/lemon/utility.h
Log:
Removing smart references
Modified: hugo/trunk/lemon/graph_reader.h
==============================================================================
--- hugo/trunk/lemon/graph_reader.h (original)
+++ hugo/trunk/lemon/graph_reader.h Wed Oct 5 15:18:51 2005
@@ -122,8 +122,7 @@
///
/// Construct a new GraphReader. It reads into the given graph
/// and it uses the given reader as the default skipper.
- GraphReader(std::istream& _is,
- typename SmartParameter<Graph>::Type _graph,
+ GraphReader(std::istream& _is, Graph& _graph,
const DefaultSkipper& _skipper = DefaultSkipper())
: reader(new LemonReader(_is)), own_reader(true), skipper(_skipper),
nodeset_reader(*reader, _graph, std::string(), skipper),
@@ -137,8 +136,7 @@
///
/// Construct a new GraphReader. It reads into the given graph
/// and it uses the given reader as the default skipper.
- GraphReader(const std::string& _filename,
- typename SmartParameter<Graph>::Type _graph,
+ GraphReader(const std::string& _filename, Graph& _graph,
const DefaultSkipper& _skipper = DefaultSkipper())
: reader(new LemonReader(_filename)), own_reader(true),
skipper(_skipper),
@@ -153,8 +151,7 @@
///
/// Construct a new GraphReader. It reads into the given graph
/// and it uses the given reader as the default skipper.
- GraphReader(LemonReader& _reader,
- typename SmartParameter<Graph>::Type _graph,
+ GraphReader(LemonReader& _reader, Graph& _graph,
const DefaultSkipper& _skipper = DefaultSkipper())
: reader(_reader), own_reader(false), skipper(_skipper),
nodeset_reader(*reader, _graph, std::string(), skipper),
Modified: hugo/trunk/lemon/lemon_reader.h
==============================================================================
--- hugo/trunk/lemon/lemon_reader.h (original)
+++ hugo/trunk/lemon/lemon_reader.h Wed Oct 5 15:18:51 2005
@@ -36,6 +36,8 @@
#include <lemon/utility.h>
#include <lemon/bits/item_reader.h>
+#include <lemon/xy.h>
+
#include <lemon/concept_check.h>
#include <lemon/concept/maps.h>
@@ -94,38 +96,108 @@
}
};
- template <typename M1, typename M2>
- class WriteComposeMap {
+ template <typename Map>
+ struct Ref { typedef Map& Type; };
+ template <typename Map>
+ struct Arg { typedef Map& Type; };
+
+ template <typename Graph, typename Map>
+ class ForwardComposeMap {
public:
- typedef True NeedCopy;
-
- typedef typename M2::Key Key;
- typedef typename M1::Value Value;
+ typedef typename Graph::UndirEdge Key;
+ typedef typename Map::Value Value;
- WriteComposeMap(typename SmartParameter<M1>::Type _m1, const M2& _m2)
- : m1(_m1), m2(_m2) {}
+ ForwardComposeMap(const Graph& _graph, typename Arg<Map>::Type _map)
+ : graph(_graph), map(_map) {}
- void set(const Key& key, const Value& value) {
- m1.set(m2[key], value);
+ void set(const Key& key, const Value& val) {
+ map.set(graph.direct(key, true), val);
}
private:
+ typename Ref<Map>::Type map;
+ const Graph& graph;
+ };
+
+ template <typename Graph, typename Map>
+ ForwardComposeMap<Graph, Map>
+ forwardComposeMap(const Graph& graph, const Map& map) {
+ return ForwardComposeMap<Graph, Map>(graph, map);
+ }
+
+ template <typename Graph, typename Map>
+ ForwardComposeMap<Graph, Map>
+ forwardComposeMap(const Graph& graph, Map& map) {
+ return ForwardComposeMap<Graph, Map>(graph, map);
+ }
+
+ template <typename Graph, typename Map>
+ class BackwardComposeMap {
+ public:
+ typedef typename Graph::UndirEdge Key;
+ typedef typename Map::Value Value;
+
+ BackwardComposeMap(const Graph& _graph, typename Arg<Map>::Type _map)
+ : graph(_graph), map(_map) {}
- typename SmartReference<M1>::Type m1;
- typename SmartConstReference<M2>::Type m2;
-
+ void set(const Key& key, const Value& val) {
+ map.set(graph.direct(key, false), val);
+ }
+
+ private:
+ typename Ref<Map>::Type map;
+ const Graph& graph;
};
- template <typename M1, typename M2>
- WriteComposeMap<M1, M2> writeComposeMap(M1& m1, const M2& m2) {
- return WriteComposeMap<M1, M2>(m1, m2);
+
+ template <typename Graph, typename Map>
+ BackwardComposeMap<Graph, Map>
+ backwardComposeMap(const Graph& graph, const Map& map) {
+ return BackwardComposeMap<Graph, Map>(graph, map);
}
- template <typename M1, typename M2>
- WriteComposeMap<M1, M2> writeComposeMap(const M1& m1, const M2& m2) {
- return WriteComposeMap<M1, M2>(m1, m2);
+ template <typename Graph, typename Map>
+ BackwardComposeMap<Graph, Map>
+ backwardComposeMap(const Graph& graph, Map& map) {
+ return BackwardComposeMap<Graph, Map>(graph, map);
}
-
+
+ template <typename Graph, typename Map>
+ struct Ref<ForwardComposeMap<Graph, Map> > {
+ typedef ForwardComposeMap<Graph, Map> Type;
+ };
+ template <typename Graph, typename Map>
+ struct Arg<ForwardComposeMap<Graph, Map> > {
+ typedef const ForwardComposeMap<Graph, Map>& Type;
+ };
+
+ template <typename Graph, typename Map>
+ struct Ref<BackwardComposeMap<Graph, Map> > {
+ typedef BackwardComposeMap<Graph, Map> Type;
+ };
+ template <typename Graph, typename Map>
+ struct Arg<BackwardComposeMap<Graph, Map> > {
+ typedef const BackwardComposeMap<Graph, Map>& Type;
+ };
+
+ template <typename Map>
+ struct Ref<XMap<Map> > {
+ typedef XMap<Map> Type;
+ };
+ template <typename Map>
+ struct Arg<XMap<Map> > {
+ typedef const XMap<Map>& Type;
+ };
+
+ template <typename Map>
+ struct Ref<YMap<Map> > {
+ typedef YMap<Map> Type;
+ };
+ template <typename Map>
+ struct Arg<YMap<Map> > {
+ typedef const YMap<Map>& Type;
+ };
+
}
/// \ingroup io_group
@@ -432,11 +504,11 @@
typedef _Map Map;
typedef std::map<Value, Item, _reader_bits::Less<Value> > Inverse;
- typename SmartReference<Map>::Type map;
+ typename _reader_bits::Ref<Map>::Type map;
Reader reader;
Inverse inverse;
- MapReaderInverter(typename SmartParameter<Map>::Type _map,
+ MapReaderInverter(typename _reader_bits::Arg<Map>::Type _map,
const Reader& _reader)
: map(_map), reader(_reader) {}
@@ -526,10 +598,10 @@
typedef typename Reader::Value Value;
typedef _Item Item;
- typename SmartReference<Map>::Type map;
+ typename _reader_bits::Ref<Map>::Type map;
Reader reader;
- MapReader(typename SmartParameter<Map>::Type _map,
+ MapReader(typename _reader_bits::Arg<Map>::Type _map,
const Reader& _reader)
: map(_map), reader(_reader) {}
@@ -659,7 +731,7 @@
/// add the readed nodes to the given Graph. The reader will read
/// the section when the \c section_id and the \c _id are the same.
NodeSetReader(LemonReader& _reader,
- typename SmartParameter<Graph>::Type _graph,
+ Graph& _graph,
const std::string& _id = std::string(),
const DefaultSkipper& _skipper = DefaultSkipper())
: Parent(_reader), graph(_graph), id(_id), skipper(_skipper) {}
@@ -688,14 +760,14 @@
NodeSetReader& readNodeMap(std::string name, Map& map) {
return _readMap<
typename Traits::template Reader<typename Map::Value>, Map,
- typename SmartParameter<Map>::Type>(name, map);
+ typename _reader_bits::Arg<Map>::Type>(name, map);
}
template <typename Map>
NodeSetReader& readNodeMap(std::string name, const Map& map) {
return _readMap<
typename Traits::template Reader<typename Map::Value>, Map,
- typename SmartParameter<Map>::Type>(name, map);
+ typename _reader_bits::Arg<Map>::Type>(name, map);
}
/// \brief Add a new node map reader command for the reader.
@@ -704,14 +776,14 @@
template <typename Reader, typename Map>
NodeSetReader& readNodeMap(std::string name, Map& map,
const Reader& reader = Reader()) {
- return _readMap<Reader, Map, typename SmartParameter<Map>::Type>
+ return _readMap<Reader, Map, typename _reader_bits::Arg<Map>::Type>
(name, map, reader);
}
template <typename Reader, typename Map>
NodeSetReader& readNodeMap(std::string name, const Map& map,
const Reader& reader = Reader()) {
- return _readMap<Reader, Map, typename SmartParameter<Map>::Type>
+ return _readMap<Reader, Map, typename _reader_bits::Arg<Map>::Type>
(name, map, reader);
}
@@ -817,7 +889,7 @@
typedef std::map<std::string, ReaderBase<Node>*> MapReaders;
MapReaders readers;
- typename SmartReference<Graph>::Type graph;
+ Graph& graph;
std::string id;
SkipReader<Node, DefaultSkipper> skipper;
@@ -867,7 +939,7 @@
/// \c edgset_id are the same.
template <typename NodeIdReader>
EdgeSetReader(LemonReader& _reader,
- typename SmartParameter<Graph>::Type _graph,
+ Graph& _graph,
const NodeIdReader& _nodeIdReader,
const std::string& _id = std::string(),
const DefaultSkipper& _skipper = DefaultSkipper())
@@ -898,14 +970,14 @@
EdgeSetReader& readEdgeMap(std::string name, Map& map) {
return _readMap<
typename Traits::template Reader<typename Map::Value>, Map,
- typename SmartParameter<Map>::Type>(name, map);
+ typename _reader_bits::Arg<Map>::Type>(name, map);
}
template <typename Map>
EdgeSetReader& readEdgeMap(std::string name, const Map& map) {
return _readMap<
typename Traits::template Reader<typename Map::Value>, Map,
- typename SmartParameter<Map>::Type>(name, map);
+ typename _reader_bits::Arg<Map>::Type>(name, map);
}
/// \brief Add a new edge map reader command for the reader.
@@ -915,14 +987,14 @@
EdgeSetReader& readEdgeMap(std::string name, Map& map,
const Reader& reader = Reader()) {
return _readMap<Reader, Map,
- typename SmartParameter<Map>::Type>(name, map, reader);
+ typename _reader_bits::Arg<Map>::Type>(name, map, reader);
}
template <typename Reader, typename Map>
EdgeSetReader& readEdgeMap(std::string name, const Map& map,
const Reader& reader = Reader()) {
return _readMap<Reader, Map,
- typename SmartParameter<Map>::Type>(name, map, reader);
+ typename _reader_bits::Arg<Map>::Type>(name, map, reader);
}
private:
@@ -1032,7 +1104,7 @@
typedef std::map<std::string, ReaderBase<Edge>*> MapReaders;
MapReaders readers;
- typename SmartReference<Graph>::Type graph;
+ Graph& graph;
std::string id;
SkipReader<Edge, DefaultSkipper> skipper;
@@ -1089,7 +1161,7 @@
/// \c _id and the \c undiredgset_id are the same.
template <typename NodeIdReader>
UndirEdgeSetReader(LemonReader& _reader,
- typename SmartParameter<Graph>::Type _graph,
+ Graph& _graph,
const NodeIdReader& _nodeIdReader,
const std::string& _id = std::string(),
const DefaultSkipper& _skipper = DefaultSkipper())
@@ -1120,14 +1192,14 @@
UndirEdgeSetReader& readUndirEdgeMap(std::string name, Map& map) {
return _readMap<
typename Traits::template Reader<typename Map::Value>, Map,
- typename SmartParameter<Map>::Type>(name, map);
+ typename _reader_bits::Arg<Map>::Type>(name, map);
}
template <typename Map>
UndirEdgeSetReader& readUndirEdgeMap(std::string name, const Map& map) {
return _readMap<
typename Traits::template Reader<typename Map::Value>, Map,
- typename SmartParameter<Map>::Type>(name, map);
+ typename _reader_bits::Arg<Map>::Type>(name, map);
}
/// \brief Add a new undirected edge map reader command for the reader.
@@ -1136,14 +1208,14 @@
template <typename Reader, typename Map>
UndirEdgeSetReader& readUndirEdgeMap(std::string name, Map& map,
const Reader& reader = Reader()) {
- return _readMap<Reader, Map, typename SmartParameter<Map>::Type>
+ return _readMap<Reader, Map, typename _reader_bits::Arg<Map>::Type>
(name, map, reader);
}
template <typename Reader, typename Map>
UndirEdgeSetReader& readUndirEdgeMap(std::string name, const Map& map,
const Reader& reader = Reader()) {
- return _readMap<Reader, Map, typename SmartParameter<Map>::Type >
+ return _readMap<Reader, Map, typename _reader_bits::Arg<Map>::Type >
(name, map, reader);
}
@@ -1189,14 +1261,14 @@
UndirEdgeSetReader& readEdgeMap(std::string name, Map& map) {
return _readDirMap<
typename Traits::template Reader<typename Map::Value>, Map,
- typename SmartParameter<Map>::Type>(name, map);
+ typename _reader_bits::Arg<Map>::Type>(name, map);
}
template <typename Map>
UndirEdgeSetReader& readEdgeMap(std::string name, const Map& map) {
return _readDirMap<
typename Traits::template Reader<typename Map::Value>, Map,
- typename SmartParameter<Map>::Type>(name, map);
+ typename _reader_bits::Arg<Map>::Type>(name, map);
}
/// \brief Add a new directed edge map reader command for the reader.
@@ -1205,14 +1277,14 @@
template <typename Reader, typename Map>
UndirEdgeSetReader& readEdgeMap(std::string name, Map& map,
const Reader& reader = Reader()) {
- return _readDirMap<Reader, Map, typename SmartParameter<Map>::Type>
+ return _readDirMap<Reader, Map, typename _reader_bits::Arg<Map>::Type>
(name, map, reader);
}
template <typename Reader, typename Map>
UndirEdgeSetReader& readEdgeMap(std::string name, const Map& map,
const Reader& reader = Reader()) {
- return _readDirMap<Reader, Map, typename SmartParameter<Map>::Type>
+ return _readDirMap<Reader, Map, typename _reader_bits::Arg<Map>::Type>
(name, map, reader);
}
@@ -1224,9 +1296,9 @@
checkConcept<_reader_bits::ItemReader<typename Map::Value>, Reader>();
checkConcept<concept::WriteMap<Edge, typename Map::Value>, Map>();
readMap("+" + name,
- _reader_bits::writeComposeMap(map, forwardMap(graph)), reader);
+ _reader_bits::forwardComposeMap(graph, map), reader);
readMap("-" + name,
- _reader_bits::writeComposeMap(map, backwardMap(graph)), reader);
+ _reader_bits::backwardComposeMap(graph, map), reader);
return *this;
}
@@ -1336,7 +1408,7 @@
typedef std::map<std::string, ReaderBase<UndirEdge>*> MapReaders;
MapReaders readers;
- typename SmartReference<Graph>::Type graph;
+ Graph& graph;
std::string id;
SkipReader<UndirEdge, DefaultSkipper> skipper;
Modified: hugo/trunk/lemon/lemon_writer.h
==============================================================================
--- hugo/trunk/lemon/lemon_writer.h (original)
+++ hugo/trunk/lemon/lemon_writer.h Wed Oct 5 15:18:51 2005
@@ -35,6 +35,7 @@
#include <lemon/bits/item_writer.h>
#include <lemon/utility.h>
#include <lemon/maps.h>
+#include <lemon/xy.h>
#include <lemon/concept_check.h>
#include <lemon/concept/maps.h>
@@ -84,6 +85,85 @@
};
+ template <typename Map>
+ struct Ref { typedef const Map& Type; };
+
+ template <typename Graph, typename Map>
+ class ForwardComposeMap {
+ public:
+ typedef typename Graph::UndirEdge Key;
+ typedef typename Map::Value Value;
+
+ ForwardComposeMap(const Graph& _graph, const Map& _map)
+ : graph(_graph), map(_map) {}
+
+ Value operator[](const Key& key) {
+ return map[graph.direct(key, false)];
+ }
+
+ private:
+ typename Ref<Map>::Type map;
+ const Graph& graph;
+ };
+
+ template <typename Graph, typename Map>
+ ForwardComposeMap<Graph, Map>
+ forwardComposeMap(const Graph& graph, const Map& map) {
+ return ForwardComposeMap<Graph, Map>(graph, map);
+ }
+
+ template <typename Graph, typename Map>
+ class BackwardComposeMap {
+ public:
+ typedef typename Graph::UndirEdge Key;
+ typedef typename Map::Value Value;
+
+ BackwardComposeMap(const Graph& _graph, const Map& _map)
+ : graph(_graph), map(_map) {}
+
+ Value operator[](const Key& key) {
+ return map[graph.direct(key, false)];
+ }
+
+ private:
+ typename Ref<Map>::Type map;
+ const Graph& graph;
+ };
+
+ template <typename Graph, typename Map>
+ BackwardComposeMap<Graph, Map>
+ backwardComposeMap(const Graph& graph, const Map& map) {
+ return BackwardComposeMap<Graph, Map>(graph, map);
+ }
+
+ template <typename Graph, typename Map>
+ struct Ref<ForwardComposeMap<Graph, Map> > {
+ typedef ForwardComposeMap<Graph, Map> Type;
+ };
+
+ template <typename Graph, typename Map>
+ struct Ref<BackwardComposeMap<Graph, Map> > {
+ typedef BackwardComposeMap<Graph, Map> Type;
+ };
+
+ template <typename Map>
+ struct Ref<XMap<Map> > {
+ typedef XMap<Map> Type;
+ };
+ template <typename Map>
+ struct Ref<ConstXMap<Map> > {
+ typedef ConstXMap<Map> Type;
+ };
+
+ template <typename Map>
+ struct Ref<YMap<Map> > {
+ typedef YMap<Map> Type;
+ };
+ template <typename Map>
+ struct Ref<ConstYMap<Map> > {
+ typedef ConstYMap<Map> Type;
+ };
+
}
/// \ingroup io_group
@@ -234,7 +314,7 @@
typedef typename Writer::Value Value;
typedef _Item Item;
- typename SmartConstReference<Map>::Type map;
+ typename _writer_bits::Ref<Map>::Type map;
Writer writer;
MapWriter(const Map& _map, const Writer& _writer)
@@ -453,7 +533,7 @@
WriterBase<Node>* idMap;
bool forceIdMap;
- typename SmartConstReference<Graph>::Type graph;
+ const Graph& graph;
std::string id;
};
@@ -627,7 +707,7 @@
WriterBase<Edge>* idMap;
bool forceIdMap;
- typename SmartConstReference<Graph>::Type graph;
+ const Graph& graph;
std::string id;
std::auto_ptr<IdWriterBase<Node> > nodeIdWriter;
@@ -746,8 +826,10 @@
const Writer& writer = Writer()) {
checkConcept<concept::ReadMap<Edge, typename Map::Value>, Map>();
checkConcept<_writer_bits::ItemWriter<typename Map::Value>, Writer>();
- writeUndirEdge("+" + name, composeMap(forwardMap(graph), map), writer);
- writeUndirEdge("-" + name, composeMap(backwardMap(graph), map), writer);
+ writeUndirEdge("+" + name,
+ _writer_bits::forwardComposeMap(graph, map), writer);
+ writeUndirEdge("-" + name,
+ _writer_bits::backwardComposeMap(graph, map), writer);
return *this;
}
@@ -853,7 +935,7 @@
WriterBase<UndirEdge>* idMap;
bool forceIdMap;
- typename SmartConstReference<Graph>::Type graph;
+ const Graph& graph;
std::string id;
std::auto_ptr<IdWriterBase<Node> > nodeIdWriter;
Modified: hugo/trunk/lemon/maps.h
==============================================================================
--- hugo/trunk/lemon/maps.h (original)
+++ hugo/trunk/lemon/maps.h Wed Oct 5 15:18:51 2005
@@ -38,11 +38,9 @@
/// Base class of maps.
/// It provides the necessary <tt>typedef</tt>s required by the map concept.
- template<typename K, typename T, typename _NeedCopy = False>
+ template<typename K, typename T>
class MapBase {
public:
- /// \e
- typedef _NeedCopy NeedCopy;
///\e
typedef K Key;
///\e
@@ -54,10 +52,10 @@
/// If you have to provide a map only for its type definitions,
/// or if you have to provide a writable map, but
/// data written to it will sent to <tt>/dev/null</tt>...
- template<typename K, typename T, typename NC = False>
- class NullMap : public MapBase<K, T, NC> {
+ template<typename K, typename T>
+ class NullMap : public MapBase<K, T> {
public:
- typedef MapBase<K, T, NC> Parent;
+ typedef MapBase<K, T> Parent;
typedef typename Parent::Key Key;
typedef typename Parent::Value Value;
@@ -68,8 +66,8 @@
};
template <typename K, typename V>
- NullMap<K, V, True> nullMap() {
- return NullMap<K, V, True>();
+ NullMap<K, V> nullMap() {
+ return NullMap<K, V>();
}
@@ -78,13 +76,13 @@
/// This is a readable map which assigns a specified value to each key.
/// In other aspects it is equivalent to the \ref NullMap.
/// \todo set could be used to set the value.
- template<typename K, typename T, typename NC = False>
- class ConstMap : public MapBase<K, T, NC> {
+ template<typename K, typename T>
+ class ConstMap : public MapBase<K, T> {
private:
T v;
public:
- typedef MapBase<K, T, NC> Parent;
+ typedef MapBase<K, T> Parent;
typedef typename Parent::Key Key;
typedef typename Parent::Value Value;
@@ -116,8 +114,8 @@
///This function just returns a \ref ConstMap class.
///\relates ConstMap
template<typename K, typename V>
- inline ConstMap<K, V, True> constMap(const V &v) {
- return ConstMap<K, V, True>(v);
+ inline ConstMap<K, V> constMap(const V &v) {
+ return ConstMap<K, V>(v);
}
@@ -126,10 +124,10 @@
struct Const { };
//\todo to document later
- template<typename K, typename V, V v, typename NC>
- class ConstMap<K, Const<V, v>, NC > : public MapBase<K, V, NC> {
+ template<typename K, typename V, V v>
+ class ConstMap<K, Const<V, v> > : public MapBase<K, V> {
public:
- typedef MapBase<K, V, False> Parent;
+ typedef MapBase<K, V> Parent;
typedef typename Parent::Key Key;
typedef typename Parent::Value Value;
@@ -143,8 +141,8 @@
///This function just returns a \ref ConstMap class.
///\relates ConstMap
template<typename K, typename V, V v>
- inline ConstMap<K, Const<V, v>, True> constMap() {
- return ConstMap<K, Const<V, v>, True>();
+ inline ConstMap<K, Const<V, v> > constMap() {
+ return ConstMap<K, Const<V, v> >();
}
/// \c std::map wrapper
@@ -225,10 +223,10 @@
///
/// This mapping gives back the given key as value without any
/// modification.
- template <typename T, typename NC = False>
- class IdentityMap : public MapBase<T, T, NC> {
+ template <typename T>
+ class IdentityMap : public MapBase<T, T> {
public:
- typedef MapBase<T, T, NC> Parent;
+ typedef MapBase<T, T> Parent;
typedef typename Parent::Key Key;
typedef typename Parent::Value Value;
@@ -242,8 +240,8 @@
///This function just returns an \ref IdentityMap class.
///\relates IdentityMap
template<typename T>
- inline IdentityMap<T, True> identityMap() {
- return IdentityMap<T, True>();
+ inline IdentityMap<T> identityMap() {
+ return IdentityMap<T>();
}
@@ -252,11 +250,11 @@
///This \ref concept::ReadMap "read only map"
///converts the \c Value of a maps to type \c T.
///Its \c Key is inherited from \c M.
- template <typename M, typename T, typename NC = False>
- class ConvertMap : public MapBase<typename M::Key, T, NC> {
- typename SmartConstReference<M>::Type m;
+ template <typename M, typename T>
+ class ConvertMap : public MapBase<typename M::Key, T> {
+ const M& m;
public:
- typedef MapBase<typename M::Key, T, NC> Parent;
+ typedef MapBase<typename M::Key, T> Parent;
typedef typename Parent::Key Key;
typedef typename Parent::Value Value;
@@ -280,8 +278,8 @@
///\relates ConvertMap
///\todo The order of the template parameters are changed.
template<typename T, typename M>
- inline ConvertMap<M, T, True> convertMap(const M &m) {
- return ConvertMap<M, T, True>(m);
+ inline ConvertMap<M, T> convertMap(const M &m) {
+ return ConvertMap<M, T>(m);
}
///Sum of two maps
@@ -290,13 +288,13 @@
///given maps. Its \c Key and \c Value will be inherited from \c M1.
///The \c Key and \c Value of M2 must be convertible to those of \c M1.
- template<typename M1, typename M2, typename NC = False>
- class AddMap : public MapBase<typename M1::Key, typename M1::Value, NC> {
- typename SmartConstReference<M1>::Type m1;
- typename SmartConstReference<M2>::Type m2;
+ template<typename M1, typename M2>
+ class AddMap : public MapBase<typename M1::Key, typename M1::Value> {
+ const M1& m1;
+ const M2& m2;
public:
- typedef MapBase<typename M1::Key, typename M1::Value, NC> Parent;
+ typedef MapBase<typename M1::Key, typename M1::Value> Parent;
typedef typename Parent::Key Key;
typedef typename Parent::Value Value;
@@ -313,8 +311,8 @@
///\relates AddMap
///\todo Wrong scope in Doxygen when \c \\relates is used
template<typename M1, typename M2>
- inline AddMap<M1, M2, True> addMap(const M1 &m1,const M2 &m2) {
- return AddMap<M1, M2, True>(m1,m2);
+ inline AddMap<M1, M2> addMap(const M1 &m1,const M2 &m2) {
+ return AddMap<M1, M2>(m1,m2);
}
///Shift a map with a constant.
@@ -332,12 +330,12 @@
/// ConstMap<X::Key, X::Value> c_tmp(v);
/// AddMap<X, ConstMap<X::Key, X::Value> > sh(x,v);
///\endcode
- template<typename M, typename C = typename M::Value, typename NC = False>
- class ShiftMap : public MapBase<typename M::Key, typename M::Value, NC> {
- typename SmartConstReference<M>::Type m;
+ template<typename M, typename C = typename M::Value>
+ class ShiftMap : public MapBase<typename M::Key, typename M::Value> {
+ const M& m;
C v;
public:
- typedef MapBase<typename M::Key, typename M::Value, NC> Parent;
+ typedef MapBase<typename M::Key, typename M::Value> Parent;
typedef typename Parent::Key Key;
typedef typename Parent::Value Value;
@@ -356,8 +354,8 @@
///\relates ShiftMap
///\todo A better name is required.
template<typename M, typename C>
- inline ShiftMap<M, C, True> shiftMap(const M &m,const C &v) {
- return ShiftMap<M, C, True>(m,v);
+ inline ShiftMap<M, C> shiftMap(const M &m,const C &v) {
+ return ShiftMap<M, C>(m,v);
}
///Difference of two maps
@@ -367,12 +365,12 @@
///given maps. Its \c Key and \c Value will be inherited from \c M1.
///The \c Key and \c Value of \c M2 must be convertible to those of \c M1.
- template<typename M1, typename M2, typename NC = False>
- class SubMap : public MapBase<typename M1::Key, typename M1::Value, NC> {
- typename SmartConstReference<M1>::Type m1;
- typename SmartConstReference<M2>::Type m2;
+ template<typename M1, typename M2>
+ class SubMap : public MapBase<typename M1::Key, typename M1::Value> {
+ const M1& m1;
+ const M2& m2;
public:
- typedef MapBase<typename M1::Key, typename M1::Value, NC> Parent;
+ typedef MapBase<typename M1::Key, typename M1::Value> Parent;
typedef typename Parent::Key Key;
typedef typename Parent::Value Value;
@@ -387,8 +385,8 @@
///
///\relates SubMap
template<typename M1, typename M2>
- inline SubMap<M1, M2, True> subMap(const M1 &m1, const M2 &m2) {
- return SubMap<M1, M2, True>(m1, m2);
+ inline SubMap<M1, M2> subMap(const M1 &m1, const M2 &m2) {
+ return SubMap<M1, M2>(m1, m2);
}
///Product of two maps
@@ -399,12 +397,12 @@
///maps. Its \c Key and \c Value will be inherited from \c M1.
///The \c Key and \c Value of \c M2 must be convertible to those of \c M1.
- template<typename M1, typename M2, typename NC = False>
- class MulMap : public MapBase<typename M1::Key, typename M1::Value, NC> {
- typename SmartConstReference<M1>::Type m1;
- typename SmartConstReference<M2>::Type m2;
+ template<typename M1, typename M2>
+ class MulMap : public MapBase<typename M1::Key, typename M1::Value> {
+ const M1& m1;
+ const M2& m2;
public:
- typedef MapBase<typename M1::Key, typename M1::Value, NC> Parent;
+ typedef MapBase<typename M1::Key, typename M1::Value> Parent;
typedef typename Parent::Key Key;
typedef typename Parent::Value Value;
@@ -418,8 +416,8 @@
///This function just returns a \ref MulMap class.
///\relates MulMap
template<typename M1, typename M2>
- inline MulMap<M1, M2, True> mulMap(const M1 &m1,const M2 &m2) {
- return MulMap<M1, M2, True>(m1,m2);
+ inline MulMap<M1, M2> mulMap(const M1 &m1,const M2 &m2) {
+ return MulMap<M1, M2>(m1,m2);
}
///Scales a maps with a constant.
@@ -437,12 +435,12 @@
/// ConstMap<X::Key, X::Value> c_tmp(v);
/// MulMap<X, ConstMap<X::Key, X::Value> > sc(x,v);
///\endcode
- template<typename M, typename C = typename M::Value, typename NC = False>
- class ScaleMap : public MapBase<typename M::Key, typename M::Value, NC> {
- typename SmartConstReference<M>::Type m;
+ template<typename M, typename C = typename M::Value>
+ class ScaleMap : public MapBase<typename M::Key, typename M::Value> {
+ const M& m;
C v;
public:
- typedef MapBase<typename M::Key, typename M::Value, NC> Parent;
+ typedef MapBase<typename M::Key, typename M::Value> Parent;
typedef typename Parent::Key Key;
typedef typename Parent::Value Value;
@@ -461,8 +459,8 @@
///\relates ScaleMap
///\todo A better name is required.
template<typename M, typename C>
- inline ScaleMap<M, C, True> scaleMap(const M &m,const C &v) {
- return ScaleMap<M, C, True>(m,v);
+ inline ScaleMap<M, C> scaleMap(const M &m,const C &v) {
+ return ScaleMap<M, C>(m,v);
}
///Quotient of two maps
@@ -472,12 +470,12 @@
///given maps. Its \c Key and \c Value will be inherited from \c M1.
///The \c Key and \c Value of \c M2 must be convertible to those of \c M1.
- template<typename M1, typename M2, typename NC = False>
- class DivMap : public MapBase<typename M1::Key, typename M1::Value, NC> {
- typename SmartConstReference<M1>::Type m1;
- typename SmartConstReference<M2>::Type m2;
+ template<typename M1, typename M2>
+ class DivMap : public MapBase<typename M1::Key, typename M1::Value> {
+ const M1& m1;
+ const M2& m2;
public:
- typedef MapBase<typename M1::Key, typename M1::Value, NC> Parent;
+ typedef MapBase<typename M1::Key, typename M1::Value> Parent;
typedef typename Parent::Key Key;
typedef typename Parent::Value Value;
@@ -491,8 +489,8 @@
///This function just returns a \ref DivMap class.
///\relates DivMap
template<typename M1, typename M2>
- inline DivMap<M1, M2, True> divMap(const M1 &m1,const M2 &m2) {
- return DivMap<M1, M2, True>(m1,m2);
+ inline DivMap<M1, M2> divMap(const M1 &m1,const M2 &m2) {
+ return DivMap<M1, M2>(m1,m2);
}
///Composition of two maps
@@ -512,12 +510,12 @@
///The \c M2::Value must be convertible to \c M1::Key.
///\todo Check the requirements.
- template <typename M1, typename M2, typename NC = False>
- class ComposeMap : public MapBase<typename M2::Key, typename M1::Value, NC> {
- typename SmartConstReference<M1>::Type m1;
- typename SmartConstReference<M2>::Type m2;
+ template <typename M1, typename M2>
+ class ComposeMap : public MapBase<typename M2::Key, typename M1::Value> {
+ const M1& m1;
+ const M2& m2;
public:
- typedef MapBase<typename M2::Key, typename M1::Value, NC> Parent;
+ typedef MapBase<typename M2::Key, typename M1::Value> Parent;
typedef typename Parent::Key Key;
typedef typename Parent::Value Value;
@@ -531,8 +529,8 @@
///
///\relates ComposeMap
template <typename M1, typename M2>
- inline ComposeMap<M1, M2, True> composeMap(const M1 &m1,const M2 &m2) {
- return ComposeMap<M1, M2, True>(m1,m2);
+ inline ComposeMap<M1, M2> composeMap(const M1 &m1,const M2 &m2) {
+ return ComposeMap<M1, M2>(m1,m2);
}
///Combines of two maps using an STL (binary) functor.
@@ -561,12 +559,12 @@
template<typename M1, typename M2, typename F,
typename V = typename F::result_type,
typename NC = False>
- class CombineMap : public MapBase<typename M1::Key, V, NC> {
- typename SmartConstReference<M1>::Type m1;
- typename SmartConstReference<M2>::Type m2;
+ class CombineMap : public MapBase<typename M1::Key, V> {
+ const M1& m1;
+ const M2& m2;
F f;
public:
- typedef MapBase<typename M1::Key, V, NC> Parent;
+ typedef MapBase<typename M1::Key, V> Parent;
typedef typename Parent::Key Key;
typedef typename Parent::Value Value;
@@ -593,19 +591,19 @@
///
///\relates CombineMap
template<typename M1, typename M2, typename F, typename V>
- inline CombineMap<M1, M2, F, V, True>
+ inline CombineMap<M1, M2, F, V>
combineMap(const M1& m1,const M2& m2, const F& f) {
- return CombineMap<M1, M2, F, V, True>(m1,m2,f);
+ return CombineMap<M1, M2, F, V>(m1,m2,f);
}
template<typename M1, typename M2, typename F>
- inline CombineMap<M1, M2, F, typename F::result_type, True>
+ inline CombineMap<M1, M2, F, typename F::result_type>
combineMap(const M1& m1, const M2& m2, const F& f) {
return combineMap<M1, M2, F, typename F::result_type>(m1,m2,f);
}
template<typename M1, typename M2, typename K1, typename K2, typename V>
- inline CombineMap<M1, M2, V (*)(K1, K2), V, True>
+ inline CombineMap<M1, M2, V (*)(K1, K2), V>
combineMap(const M1 &m1, const M2 &m2, V (*f)(K1, K2)) {
return combineMap<M1, M2, V (*)(K1, K2), V>(m1,m2,f);
}
@@ -618,11 +616,11 @@
///given map. Its \c Key and \c Value will be inherited from \c M.
///The unary \c - operator must be defined for \c Value, of course.
- template<typename M, typename NC = False>
- class NegMap : public MapBase<typename M::Key, typename M::Value, NC> {
- typename SmartConstReference<M>::Type m;
+ template<typename M>
+ class NegMap : public MapBase<typename M::Key, typename M::Value> {
+ const M& m;
public:
- typedef MapBase<typename M::Key, typename M::Value, NC> Parent;
+ typedef MapBase<typename M::Key, typename M::Value> Parent;
typedef typename Parent::Key Key;
typedef typename Parent::Value Value;
@@ -636,8 +634,8 @@
///This function just returns a \ref NegMap class.
///\relates NegMap
template <typename M>
- inline NegMap<M, True> negMap(const M &m) {
- return NegMap<M, True>(m);
+ inline NegMap<M> negMap(const M &m) {
+ return NegMap<M>(m);
}
@@ -664,11 +662,11 @@
///\endcode
- template<typename M, typename NC = False>
- class AbsMap : public MapBase<typename M::Key, typename M::Value, NC> {
- typename SmartConstReference<M>::Type m;
+ template<typename M>
+ class AbsMap : public MapBase<typename M::Key, typename M::Value> {
+ const M& m;
public:
- typedef MapBase<typename M::Key, typename M::Value, NC> Parent;
+ typedef MapBase<typename M::Key, typename M::Value> Parent;
typedef typename Parent::Key Key;
typedef typename Parent::Value Value;
@@ -686,8 +684,8 @@
///This function just returns a \ref AbsMap class.
///\relates AbsMap
template<typename M>
- inline AbsMap<M, True> absMap(const M &m) {
- return AbsMap<M, True>(m);
+ inline AbsMap<M> absMap(const M &m) {
+ return AbsMap<M>(m);
}
///Converts an STL style functor to a map
@@ -707,10 +705,10 @@
typename K = typename F::argument_type,
typename V = typename F::result_type,
typename NC = False>
- class FunctorMap : public MapBase<K, V, NC> {
+ class FunctorMap : public MapBase<K, V> {
F f;
public:
- typedef MapBase<K, V, NC> Parent;
+ typedef MapBase<K, V> Parent;
typedef typename Parent::Key Key;
typedef typename Parent::Value Value;
@@ -727,20 +725,20 @@
///The third template parameter isn't necessary to be given.
///\relates FunctorMap
template<typename K, typename V, typename F> inline
- FunctorMap<F, K, V, True> functorMap(const F &f) {
- return FunctorMap<F, K, V, True>(f);
+ FunctorMap<F, K, V> functorMap(const F &f) {
+ return FunctorMap<F, K, V>(f);
}
template <typename F> inline
- FunctorMap<F, typename F::argument_type, typename F::result_type, True>
+ FunctorMap<F, typename F::argument_type, typename F::result_type>
functorMap(const F &f) {
return FunctorMap<F, typename F::argument_type,
- typename F::result_type, True>(f);
+ typename F::result_type>(f);
}
template <typename K, typename V> inline
- FunctorMap<V (*)(K), K, V, True> functorMap(V (*f)(K)) {
- return FunctorMap<V (*)(K), K, V, True>(f);
+ FunctorMap<V (*)(K), K, V> functorMap(V (*f)(K)) {
+ return FunctorMap<V (*)(K), K, V>(f);
}
@@ -753,11 +751,11 @@
///a ususal \ref concept::ReadMap "readable map",
///i.e. <tt>operator[]</tt> and the \c Key and \c Value typedefs also exist.
- template <typename M, typename NC = False>
- class MapFunctor : public MapBase<typename M::Key, typename M::Value, NC> {
- typename SmartConstReference<M>::Type m;
+ template <typename M>
+ class MapFunctor : public MapBase<typename M::Key, typename M::Value> {
+ const M& m;
public:
- typedef MapBase<typename M::Key, typename M::Value, NC> Parent;
+ typedef MapBase<typename M::Key, typename M::Value> Parent;
typedef typename Parent::Key Key;
typedef typename Parent::Value Value;
@@ -779,8 +777,8 @@
///This function just returns a \ref MapFunctor class.
///\relates MapFunctor
template<typename M>
- inline MapFunctor<M, True> mapFunctor(const M &m) {
- return MapFunctor<M, True>(m);
+ inline MapFunctor<M> mapFunctor(const M &m) {
+ return MapFunctor<M>(m);
}
@@ -795,12 +793,12 @@
///The \c Key and \c Value will be inherited from \c M1.
///The \c Key and \c Value of M2 must be convertible from those of \c M1.
- template<typename M1, typename M2, typename NC = False>
- class ForkMap : public MapBase<typename M1::Key, typename M1::Value, NC> {
- typename SmartConstReference<M1>::Type m1;
- typename SmartConstReference<M2>::Type m2;
+ template<typename M1, typename M2>
+ class ForkMap : public MapBase<typename M1::Key, typename M1::Value> {
+ const M1& m1;
+ const M2& m2;
public:
- typedef MapBase<typename M1::Key, typename M1::Value, NC> Parent;
+ typedef MapBase<typename M1::Key, typename M1::Value> Parent;
typedef typename Parent::Key Key;
typedef typename Parent::Value Value;
@@ -818,8 +816,8 @@
///\relates ForkMap
///\todo Wrong scope in Doxygen when \c \\relates is used
template <typename M1, typename M2>
- inline ForkMap<M1, M2, True> forkMap(const M1 &m1,const M2 &m2) {
- return ForkMap<M1, M2, True>(m1,m2);
+ inline ForkMap<M1, M2> forkMap(const M1 &m1,const M2 &m2) {
+ return ForkMap<M1, M2>(m1,m2);
}
@@ -834,11 +832,11 @@
///given map. Its \c Key and will be inherited from \c M,
///its Value is <tt>bool</tt>.
- template <typename M, typename NC = False>
- class NotMap : public MapBase<typename M::Key, bool, NC> {
- typename SmartConstReference<M>::Type m;
+ template <typename M>
+ class NotMap : public MapBase<typename M::Key, bool> {
+ const M& m;
public:
- typedef MapBase<typename M::Key, bool, NC> Parent;
+ typedef MapBase<typename M::Key, bool> Parent;
typedef typename Parent::Key Key;
typedef typename Parent::Value Value;
@@ -852,8 +850,8 @@
///This function just returns a \ref NotMap class.
///\relates NotMap
template <typename M>
- inline NotMap<M, True> notMap(const M &m) {
- return NotMap<M, True>(m);
+ inline NotMap<M> notMap(const M &m) {
+ return NotMap<M>(m);
}
/// @}
Modified: hugo/trunk/lemon/utility.h
==============================================================================
--- hugo/trunk/lemon/utility.h (original)
+++ hugo/trunk/lemon/utility.h Wed Oct 5 15:18:51 2005
@@ -139,47 +139,6 @@
template <class Cond, class T>
struct lazy_disable_if : public lazy_disable_if_c<Cond::value, T> {};
- // smart referencing
-
- template <typename _Type, typename Enable = void>
- struct SmartReference {
- typedef _Type& Type;
- };
-
- template <typename _Type>
- struct SmartReference<
- _Type,
- typename enable_if<typename _Type::NeedCopy, void>::type
- > {
- typedef _Type Type;
- };
-
- template <typename _Type, typename Enable = void>
- struct SmartConstReference {
- typedef const _Type& Type;
- };
-
- template <typename _Type>
- struct SmartConstReference<
- _Type,
- typename enable_if<typename _Type::NeedCopy, void>::type
- > {
- typedef const _Type Type;
- };
-
- template <typename _Type, typename Enable = void>
- struct SmartParameter {
- typedef _Type& Type;
- };
-
- template <typename _Type>
- struct SmartParameter<
- _Type,
- typename enable_if<typename _Type::NeedCopy, void>::type
- > {
- typedef const _Type& Type;
- };
-
} // namespace lemon
#endif
More information about the Lemon-commits
mailing list