|      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     } |