1 /* -*- C++ -*-  | 
     1 /* -*- mode: C++; indent-tabs-mode: nil; -*-  | 
     2  *  | 
     2  *  | 
     3  * This file is a part of LEMON, a generic C++ optimization library  | 
     3  * This file is a part of LEMON, a generic C++ optimization library.  | 
     4  *  | 
     4  *  | 
     5  * Copyright (C) 2003-2008  | 
     5  * Copyright (C) 2003-2008  | 
     6  * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport  | 
     6  * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport  | 
     7  * (Egervary Research Group on Combinatorial Optimization, EGRES).  | 
     7  * (Egervary Research Group on Combinatorial Optimization, EGRES).  | 
     8  *  | 
     8  *  | 
    27 ///\ingroup graphbits  | 
    27 ///\ingroup graphbits  | 
    28 ///\file  | 
    28 ///\file  | 
    29 ///\brief Graph maps that construct and destruct their elements dynamically.  | 
    29 ///\brief Graph maps that construct and destruct their elements dynamically.  | 
    30   | 
    30   | 
    31 namespace lemon { | 
    31 namespace lemon { | 
    32     | 
    32   | 
    33     | 
    33   | 
    34   //#ifndef LEMON_USE_DEBUG_MAP  | 
    34   //#ifndef LEMON_USE_DEBUG_MAP  | 
    35   | 
    35   | 
    36   template <typename _Graph, typename _Item, typename _Value>  | 
    36   template <typename _Graph, typename _Item, typename _Value>  | 
    37   struct DefaultMapSelector { | 
    37   struct DefaultMapSelector { | 
    38     typedef ArrayMap<_Graph, _Item, _Value> Map;  | 
    38     typedef ArrayMap<_Graph, _Item, _Value> Map;  | 
   138   template <typename _Graph, typename _Item, typename _Ptr>  | 
   138   template <typename _Graph, typename _Item, typename _Ptr>  | 
   139   struct DefaultMapSelector<_Graph, _Item, _Ptr*> { | 
   139   struct DefaultMapSelector<_Graph, _Item, _Ptr*> { | 
   140     typedef VectorMap<_Graph, _Item, _Ptr*> Map;  | 
   140     typedef VectorMap<_Graph, _Item, _Ptr*> Map;  | 
   141   };  | 
   141   };  | 
   142   | 
   142   | 
   143 // #else   | 
   143 // #else  | 
   144   | 
   144   | 
   145 //   template <typename _Graph, typename _Item, typename _Value>  | 
   145 //   template <typename _Graph, typename _Item, typename _Value>  | 
   146 //   struct DefaultMapSelector { | 
   146 //   struct DefaultMapSelector { | 
   147 //     typedef DebugMap<_Graph, _Item, _Value> Map;  | 
   147 //     typedef DebugMap<_Graph, _Item, _Value> Map;  | 
   148 //   };  | 
   148 //   };  | 
   149   | 
   149   | 
   150 // #endif    | 
   150 // #endif  | 
   151   | 
   151   | 
   152   /// \e  | 
   152   /// \e  | 
   153   template <typename _Graph, typename _Item, typename _Value>  | 
   153   template <typename _Graph, typename _Item, typename _Value>  | 
   154   class DefaultMap   | 
   154   class DefaultMap  | 
   155     : public DefaultMapSelector<_Graph, _Item, _Value>::Map { | 
   155     : public DefaultMapSelector<_Graph, _Item, _Value>::Map { | 
   156   public:  | 
   156   public:  | 
   157     typedef typename DefaultMapSelector<_Graph, _Item, _Value>::Map Parent;  | 
   157     typedef typename DefaultMapSelector<_Graph, _Item, _Value>::Map Parent;  | 
   158     typedef DefaultMap<_Graph, _Item, _Value> Map;  | 
   158     typedef DefaultMap<_Graph, _Item, _Value> Map;  | 
   159       | 
   159   | 
   160     typedef typename Parent::Graph Graph;  | 
   160     typedef typename Parent::Graph Graph;  | 
   161     typedef typename Parent::Value Value;  | 
   161     typedef typename Parent::Value Value;  | 
   162   | 
   162   | 
   163     explicit DefaultMap(const Graph& graph) : Parent(graph) {} | 
   163     explicit DefaultMap(const Graph& graph) : Parent(graph) {} | 
   164     DefaultMap(const Graph& graph, const Value& value)   | 
   164     DefaultMap(const Graph& graph, const Value& value)  | 
   165       : Parent(graph, value) {} | 
   165       : Parent(graph, value) {} | 
   166   | 
   166   | 
   167     DefaultMap& operator=(const DefaultMap& cmap) { | 
   167     DefaultMap& operator=(const DefaultMap& cmap) { | 
   168       return operator=<DefaultMap>(cmap);  | 
   168       return operator=<DefaultMap>(cmap);  | 
   169     }  | 
   169     }  |