COIN-OR::LEMON - Graph Library

Changeset 1420:e37cca875667 in lemon-0.x for src


Ignore:
Timestamp:
05/14/05 19:37:33 (19 years ago)
Author:
Balazs Dezso
Branch:
default
Phase:
public
Convert:
svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@1890
Message:

Smart reference handling in map adaptors

Location:
src/lemon
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/lemon/maps.h

    r1402 r1420  
    1818#define LEMON_MAPS_H
    1919
     20#include <lemon/graph_utils.h>
     21#include <lemon/utility.h>
     22
    2023
    2124///\file
     
    5659  {
    5760  public:
     61   
     62    typedef True NeedCopy;
    5863
    5964    /// Gives back a default constructed element.
     
    6267    void set(const K&, const T&) {}
    6368  };
     69
     70  template <typename K, typename V>
     71  NullMap<K, V> nullMap() {
     72    return NullMap<K, V>();
     73  }
    6474
    6575
     
    7484    T v;
    7585  public:
     86
     87    typedef True NeedCopy;
    7688
    7789    /// Default constructor
     
    209221  ///\bug wrong documentation
    210222  template<class M, class T>
    211   class ConvertMap
    212   {
    213     const M &m;
    214   public:
     223  class ConvertMap {
     224    typename SmartConstReference<M>::Type m;
     225  public:
     226
     227    typedef True NeedCopy;
     228
    215229    typedef typename M::Key Key;
    216230    typedef T Value;
     
    251265  class AddMap
    252266  {
    253     const M1 &m1;
    254     const M2 &m2;
    255   public:
     267    typename SmartConstReference<M1>::Type m1;
     268    typename SmartConstReference<M2>::Type m2;
     269
     270  public:
     271
     272    typedef True NeedCopy;
     273
    256274    typedef typename M1::Key Key;
    257275    typedef typename M1::Value Value;
     
    296314  class ShiftMap
    297315  {
    298     const M &m;
     316    typename SmartConstReference<M>::Type m;
    299317    typename M::Value v;
    300318  public:
     319
     320    typedef True NeedCopy;
    301321    typedef typename M::Key Key;
    302322    typedef typename M::Value Value;
     
    332352  class SubMap
    333353  {
    334     const M1 &m1;
    335     const M2 &m2;
    336   public:
     354    typename SmartConstReference<M1>::Type m1;
     355    typename SmartConstReference<M2>::Type m2;
     356  public:
     357
     358    typedef True NeedCopy;
    337359    typedef typename M1::Key Key;
    338360    typedef typename M1::Value Value;
     
    368390  class MulMap
    369391  {
    370     const M1 &m1;
    371     const M2 &m2;
    372   public:
     392    typename SmartConstReference<M1>::Type m1;
     393    typename SmartConstReference<M2>::Type m2;
     394  public:
     395
     396    typedef True NeedCopy;
    373397    typedef typename M1::Key Key;
    374398    typedef typename M1::Value Value;
     
    410434  class ScaleMap
    411435  {
    412     const M &m;
     436    typename SmartConstReference<M>::Type m;
    413437    typename M::Value v;
    414438  public:
     439
     440    typedef True NeedCopy;
    415441    typedef typename M::Key Key;
    416442    typedef typename M::Value Value;
     
    446472  class DivMap
    447473  {
    448     const M1 &m1;
    449     const M2 &m2;
    450   public:
     474    typename SmartConstReference<M1>::Type m1;
     475    typename SmartConstReference<M2>::Type m2;
     476  public:
     477
     478    typedef True NeedCopy;
    451479    typedef typename M1::Key Key;
    452480    typedef typename M1::Value Value;
     
    490518  class ComposeMap
    491519  {
    492     const M1 &m1;
    493     const M2 &m2;
    494   public:
     520    typename SmartConstReference<M1>::Type m1;
     521    typename SmartConstReference<M2>::Type m2;
     522  public:
     523
     524    typedef True NeedCopy;
    495525    typedef typename M2::Key Key;
    496526    typedef typename M1::Value Value;
     527
     528    typedef True NeedCopy;
    497529
    498530    ///Constructor
     
    537569  ///\todo Check the requirements.
    538570
    539   template<class M1,class M2,class F,class V>
     571  template<class M1,class M2,class F,class V = typename F::result_type>
    540572  class CombineMap
    541573  {
    542     const M1 &m1;
    543     const M2 &m2;
    544     const F &f;
    545   public:
     574    typename SmartConstReference<M1>::Type m1;
     575    typename SmartConstReference<M2>::Type m2;
     576    F f;
     577  public:
     578
     579    typedef True NeedCopy;
    546580    typedef typename M1::Key Key;
    547581    typedef V Value;
     
    572606  ///
    573607  ///\relates CombineMap
    574   template<class V,class M1,class M2,class F>
    575   inline CombineMap<M1,M2,F,V> combineMap(const M1 &m1,const M2 &m2,const F &f)
    576   {
    577     return CombineMap<M1,M2,F,V>(m1,m2,f);
     608  template<class M1,class M2,class F>
     609  inline CombineMap<M1,M2,F> combineMap(const M1 &m1,const M2 &m2,const F &f)
     610  {
     611    return CombineMap<M1,M2,F>(m1,m2,f);
    578612  }
    579613
     
    589623  class NegMap
    590624  {
    591     const M &m;
    592   public:
     625    typename SmartConstReference<M>::Type m;
     626  public:
     627
     628    typedef True NeedCopy;
    593629    typedef typename M::Key Key;
    594630    typedef typename M::Value Value;
     
    639675  class AbsMap
    640676  {
    641     const M &m;
    642   public:
     677    typename SmartConstReference<M>::Type m;
     678  public:
     679
     680    typedef True NeedCopy;
    643681    typedef typename M::Key Key;
    644682    typedef typename M::Value Value;
     
    680718    const F &f;
    681719  public:
     720
     721    typedef True NeedCopy;
    682722    typedef K Key;
    683723    typedef V Value;
     
    715755  class MapFunctor
    716756  {
    717     const M &m;
    718   public:
     757    typename SmartConstReference<M>::Type m;
     758  public:
     759
     760    typedef True NeedCopy;
    719761    typedef typename M::Key argument_type;
    720762    typedef typename M::Value result_type;
     
    762804  class ForkMap
    763805  {
    764     const M1 &m1;
    765     const M2 &m2;
    766   public:
     806    typename SmartConstReference<M1>::Type m1;
     807    typename SmartConstReference<M2>::Type m2;
     808  public:
     809
     810    typedef True NeedCopy;
    767811    typedef typename M1::Key Key;
    768812    typedef typename M1::Value Value;
  • src/lemon/xy.h

    r1392 r1420  
    1919
    2020#include <iostream>
     21#include <lemon/utility.h>
    2122
    2223///\ingroup misc
     
    351352  class XMap
    352353  {
    353     M &_map;
     354    typename SmartReference<M>::Type _map;
    354355  public:
     356    typedef True NeedCopy;
     357
    355358    typedef typename M::Value::Value Value;
    356359    typedef typename M::Key Key;
    357360    ///\e
    358     XMap(M &map) : _map(map) {}
     361    XMap(typename SmartParameter<M>::Type map) : _map(map) {}
    359362    Value operator[](Key k) const {return _map[k].x;}
    360363    void set(Key k,Value v) {_map.set(k,typename M::Value(v,_map[k].y));}
     
    373376  }
    374377
     378  template<class M>
     379  inline XMap<M> xMap(const M &m)
     380  {
     381    return XMap<M>(m);
     382  }
     383
    375384  ///Constant (read only) version of \ref XMap
    376385
     
    380389  class ConstXMap
    381390  {
    382     const M &_map;
     391    typename SmartConstReference<M>::Type _map;
    383392  public:
     393    typedef True NeedCopy;
     394
    384395    typedef typename M::Value::Value Value;
    385396    typedef typename M::Key Key;
     
    408419  class YMap
    409420  {
    410     M &_map;
     421    typename SmartReference<M>::Type _map;
    411422  public:
     423    typedef True NeedCopy;
     424
    412425    typedef typename M::Value::Value Value;
    413426    typedef typename M::Key Key;
    414427    ///\e
    415     YMap(M &map) : _map(map) {}
     428    YMap(typename SmartParameter<M>::Type map) : _map(map) {}
    416429    Value operator[](Key k) const {return _map[k].y;}
    417430    void set(Key k,Value v) {_map.set(k,typename M::Value(_map[k].x,v));}
     
    430443  }
    431444
     445  template<class M>
     446  inline YMap<M> yMap(const M &m)
     447  {
     448    return YMap<M>(m);
     449  }
     450
    432451  ///Constant (read only) version of \ref YMap
    433452
     
    437456  class ConstYMap
    438457  {
    439     const M &_map;
     458    typename SmartConstReference<M>::Type _map;
    440459  public:
     460    typedef True NeedCopy;
     461
    441462    typedef typename M::Value::Value Value;
    442463    typedef typename M::Key Key;
     
    467488  class NormSquareMap
    468489  {
    469     const M &_map;
     490    typename SmartConstReference<M>::Type _map;
    470491  public:
     492    typedef True NeedCopy;
     493
    471494    typedef typename M::Value::Value Value;
    472495    typedef typename M::Key Key;
Note: See TracChangeset for help on using the changeset viewer.