[Lemon-commits] [lemon_svn] deba: r1890 - hugo/trunk/src/lemon
Lemon SVN
svn at lemon.cs.elte.hu
Mon Nov 6 20:48:29 CET 2006
Author: deba
Date: Sat May 14 19:37:33 2005
New Revision: 1890
Modified:
hugo/trunk/src/lemon/maps.h
hugo/trunk/src/lemon/xy.h
Log:
Smart reference handling in map adaptors
Modified: hugo/trunk/src/lemon/maps.h
==============================================================================
--- hugo/trunk/src/lemon/maps.h (original)
+++ hugo/trunk/src/lemon/maps.h Sat May 14 19:37:33 2005
@@ -17,6 +17,9 @@
#ifndef LEMON_MAPS_H
#define LEMON_MAPS_H
+#include <lemon/graph_utils.h>
+#include <lemon/utility.h>
+
///\file
///\ingroup maps
@@ -55,6 +58,8 @@
class NullMap : public MapBase<K,T>
{
public:
+
+ typedef True NeedCopy;
/// Gives back a default constructed element.
T operator[](const K&) const { return T(); }
@@ -62,6 +67,11 @@
void set(const K&, const T&) {}
};
+ template <typename K, typename V>
+ NullMap<K, V> nullMap() {
+ return NullMap<K, V>();
+ }
+
/// Constant map.
@@ -74,6 +84,8 @@
T v;
public:
+ typedef True NeedCopy;
+
/// Default constructor
/// The value of the map will be uninitialized.
@@ -208,10 +220,12 @@
///\endcode
///\bug wrong documentation
template<class M, class T>
- class ConvertMap
- {
- const M &m;
+ class ConvertMap {
+ typename SmartConstReference<M>::Type m;
public:
+
+ typedef True NeedCopy;
+
typedef typename M::Key Key;
typedef T Value;
@@ -250,9 +264,13 @@
template<class M1,class M2>
class AddMap
{
- const M1 &m1;
- const M2 &m2;
+ typename SmartConstReference<M1>::Type m1;
+ typename SmartConstReference<M2>::Type m2;
+
public:
+
+ typedef True NeedCopy;
+
typedef typename M1::Key Key;
typedef typename M1::Value Value;
@@ -295,9 +313,11 @@
template<class M>
class ShiftMap
{
- const M &m;
+ typename SmartConstReference<M>::Type m;
typename M::Value v;
public:
+
+ typedef True NeedCopy;
typedef typename M::Key Key;
typedef typename M::Value Value;
@@ -331,9 +351,11 @@
template<class M1,class M2>
class SubMap
{
- const M1 &m1;
- const M2 &m2;
+ typename SmartConstReference<M1>::Type m1;
+ typename SmartConstReference<M2>::Type m2;
public:
+
+ typedef True NeedCopy;
typedef typename M1::Key Key;
typedef typename M1::Value Value;
@@ -367,9 +389,11 @@
template<class M1,class M2>
class MulMap
{
- const M1 &m1;
- const M2 &m2;
+ typename SmartConstReference<M1>::Type m1;
+ typename SmartConstReference<M2>::Type m2;
public:
+
+ typedef True NeedCopy;
typedef typename M1::Key Key;
typedef typename M1::Value Value;
@@ -409,9 +433,11 @@
template<class M>
class ScaleMap
{
- const M &m;
+ typename SmartConstReference<M>::Type m;
typename M::Value v;
public:
+
+ typedef True NeedCopy;
typedef typename M::Key Key;
typedef typename M::Value Value;
@@ -445,9 +471,11 @@
template<class M1,class M2>
class DivMap
{
- const M1 &m1;
- const M2 &m2;
+ typename SmartConstReference<M1>::Type m1;
+ typename SmartConstReference<M2>::Type m2;
public:
+
+ typedef True NeedCopy;
typedef typename M1::Key Key;
typedef typename M1::Value Value;
@@ -489,12 +517,16 @@
template<class M1,class M2>
class ComposeMap
{
- const M1 &m1;
- const M2 &m2;
+ typename SmartConstReference<M1>::Type m1;
+ typename SmartConstReference<M2>::Type m2;
public:
+
+ typedef True NeedCopy;
typedef typename M2::Key Key;
typedef typename M1::Value Value;
+ typedef True NeedCopy;
+
///Constructor
///\e
@@ -536,13 +568,15 @@
///to \c V.
///\todo Check the requirements.
- template<class M1,class M2,class F,class V>
+ template<class M1,class M2,class F,class V = typename F::result_type>
class CombineMap
{
- const M1 &m1;
- const M2 &m2;
- const F &f;
+ typename SmartConstReference<M1>::Type m1;
+ typename SmartConstReference<M2>::Type m2;
+ F f;
public:
+
+ typedef True NeedCopy;
typedef typename M1::Key Key;
typedef V Value;
@@ -571,10 +605,10 @@
///\endcode
///
///\relates CombineMap
- template<class V,class M1,class M2,class F>
- inline CombineMap<M1,M2,F,V> combineMap(const M1 &m1,const M2 &m2,const F &f)
+ template<class M1,class M2,class F>
+ inline CombineMap<M1,M2,F> combineMap(const M1 &m1,const M2 &m2,const F &f)
{
- return CombineMap<M1,M2,F,V>(m1,m2,f);
+ return CombineMap<M1,M2,F>(m1,m2,f);
}
///Negative value of a map
@@ -588,8 +622,10 @@
template<class M>
class NegMap
{
- const M &m;
+ typename SmartConstReference<M>::Type m;
public:
+
+ typedef True NeedCopy;
typedef typename M::Key Key;
typedef typename M::Value Value;
@@ -638,8 +674,10 @@
template<class M>
class AbsMap
{
- const M &m;
+ typename SmartConstReference<M>::Type m;
public:
+
+ typedef True NeedCopy;
typedef typename M::Key Key;
typedef typename M::Value Value;
@@ -679,6 +717,8 @@
{
const F &f;
public:
+
+ typedef True NeedCopy;
typedef K Key;
typedef V Value;
@@ -714,8 +754,10 @@
template<class M>
class MapFunctor
{
- const M &m;
+ typename SmartConstReference<M>::Type m;
public:
+
+ typedef True NeedCopy;
typedef typename M::Key argument_type;
typedef typename M::Value result_type;
typedef typename M::Key Key;
@@ -761,9 +803,11 @@
template<class M1,class M2>
class ForkMap
{
- const M1 &m1;
- const M2 &m2;
+ typename SmartConstReference<M1>::Type m1;
+ typename SmartConstReference<M2>::Type m2;
public:
+
+ typedef True NeedCopy;
typedef typename M1::Key Key;
typedef typename M1::Value Value;
Modified: hugo/trunk/src/lemon/xy.h
==============================================================================
--- hugo/trunk/src/lemon/xy.h (original)
+++ hugo/trunk/src/lemon/xy.h Sat May 14 19:37:33 2005
@@ -18,6 +18,7 @@
#define LEMON_XY_H
#include <iostream>
+#include <lemon/utility.h>
///\ingroup misc
///\file
@@ -350,12 +351,14 @@
template<class M>
class XMap
{
- M &_map;
+ typename SmartReference<M>::Type _map;
public:
+ typedef True NeedCopy;
+
typedef typename M::Value::Value Value;
typedef typename M::Key Key;
///\e
- XMap(M &map) : _map(map) {}
+ XMap(typename SmartParameter<M>::Type map) : _map(map) {}
Value operator[](Key k) const {return _map[k].x;}
void set(Key k,Value v) {_map.set(k,typename M::Value(v,_map[k].y));}
};
@@ -372,6 +375,12 @@
return XMap<M>(m);
}
+ template<class M>
+ inline XMap<M> xMap(const M &m)
+ {
+ return XMap<M>(m);
+ }
+
///Constant (read only) version of \ref XMap
///\ingroup maps
@@ -379,8 +388,10 @@
template<class M>
class ConstXMap
{
- const M &_map;
+ typename SmartConstReference<M>::Type _map;
public:
+ typedef True NeedCopy;
+
typedef typename M::Value::Value Value;
typedef typename M::Key Key;
///\e
@@ -407,12 +418,14 @@
template<class M>
class YMap
{
- M &_map;
+ typename SmartReference<M>::Type _map;
public:
+ typedef True NeedCopy;
+
typedef typename M::Value::Value Value;
typedef typename M::Key Key;
///\e
- YMap(M &map) : _map(map) {}
+ YMap(typename SmartParameter<M>::Type map) : _map(map) {}
Value operator[](Key k) const {return _map[k].y;}
void set(Key k,Value v) {_map.set(k,typename M::Value(_map[k].x,v));}
};
@@ -429,6 +442,12 @@
return YMap<M>(m);
}
+ template<class M>
+ inline YMap<M> yMap(const M &m)
+ {
+ return YMap<M>(m);
+ }
+
///Constant (read only) version of \ref YMap
///\ingroup maps
@@ -436,8 +455,10 @@
template<class M>
class ConstYMap
{
- const M &_map;
+ typename SmartConstReference<M>::Type _map;
public:
+ typedef True NeedCopy;
+
typedef typename M::Value::Value Value;
typedef typename M::Key Key;
///\e
@@ -466,8 +487,10 @@
template<class M>
class NormSquareMap
{
- const M &_map;
+ typename SmartConstReference<M>::Type _map;
public:
+ typedef True NeedCopy;
+
typedef typename M::Value::Value Value;
typedef typename M::Key Key;
///\e
More information about the Lemon-commits
mailing list