COIN-OR::LEMON - Graph Library

source: lemon-0.x/src/hugo/default_map.h @ 873:f3a30fda2e49

Last change on this file since 873:f3a30fda2e49 was 822:88226d9fe821, checked in by Balazs Dezso, 20 years ago

The MapFactories? have been removed from the code because
if we use macros then they increases only the complexity.

The pair iterators of the maps are separeted from the maps.

Some macros and comments has been changed.

File size: 3.1 KB
Line 
1// -*- c++ -*-
2#ifndef DEFAULT_MAP_H
3#define DEFAULT_MAP_H
4
5
6#include <hugo/array_map.h>
7#include <hugo/vector_map.h>
8
9///\ingroup graphmaps
10///\file
11///\brief Graph maps that construates and destruates
12///their elements dynamically.
13
14namespace hugo {
15
16/// \addtogroup graphmaps
17/// @{
18
19  /** The ArrayMap template class is graph map structure what
20   *  automatically updates the map when a key is added to or erased from
21   *  the map. This map uses the VectorMap if the ValueType is a primitive
22   *  type and the ArrayMap for the other cases.
23   *
24   *  The template parameter is the MapRegistry that the maps
25   *  will belong to and the ValueType.
26   */
27
28
29  /** Macro to implement the DefaultMap.
30   */
31#define DEFAULT_MAP_BODY(DynMap, Value) \
32  { \
33    typedef DynMap<MapRegistry, Value> MapImpl; \
34  \
35  public: \
36  \
37    typedef typename MapRegistry::Graph Graph; \
38  \
39    DefaultMap() : MapImpl() {} \
40  \
41    DefaultMap(const Graph& g, MapRegistry& r) : MapImpl(g, r) {} \
42  \
43    DefaultMap(const Graph& g, MapRegistry& r, const Value& v) \
44      : MapImpl(g, r, v) {} \
45  \
46    DefaultMap(const DefaultMap& copy) \
47      : MapImpl(static_cast<const MapImpl&>(copy)) {} \
48  \
49    template <typename CMap> DefaultMap(const CMap& copy) : MapImpl(copy) {} \
50  \
51    DefaultMap& operator=(const DefaultMap& copy) { \
52      MapImpl::operator=(static_cast<const MapImpl&>(copy)); \
53      return *this; \
54    } \
55  \
56    template <typename CMap> DefaultMap& operator=(const CMap& copy) { \
57      MapImpl::operator=(copy); \
58      return *this; \
59    } \
60  \
61  };
62
63
64  template <typename MapRegistry, typename Type>
65  class DefaultMap : public ArrayMap<MapRegistry, Type>
66  DEFAULT_MAP_BODY(ArrayMap, Type);
67
68  template <typename MapRegistry>
69  class DefaultMap<MapRegistry, bool>
70    : public VectorMap<MapRegistry, bool>
71  DEFAULT_MAP_BODY(VectorMap, bool);
72
73  template <typename MapRegistry>
74  class DefaultMap<MapRegistry, char>
75    : public VectorMap<MapRegistry, char>
76  DEFAULT_MAP_BODY(VectorMap, char);
77
78  template <typename MapRegistry>
79  class DefaultMap<MapRegistry, int>
80    : public VectorMap<MapRegistry, int>
81  DEFAULT_MAP_BODY(VectorMap, int);
82
83  template <typename MapRegistry>
84  class DefaultMap<MapRegistry, short>
85    : public VectorMap<MapRegistry, short>
86  DEFAULT_MAP_BODY(VectorMap, short);
87
88  template <typename MapRegistry>
89  class DefaultMap<MapRegistry, long>
90    : public VectorMap<MapRegistry, long>
91  DEFAULT_MAP_BODY(VectorMap, long);
92
93  template <typename MapRegistry>
94  class DefaultMap<MapRegistry, float>
95    : public VectorMap<MapRegistry, float>
96  DEFAULT_MAP_BODY(VectorMap, float);
97
98  template <typename MapRegistry>
99  class DefaultMap<MapRegistry, double>
100    : public VectorMap<MapRegistry, double>
101  DEFAULT_MAP_BODY(VectorMap, double);
102
103  template <typename MapRegistry>
104  class DefaultMap<MapRegistry, long double>
105    : public VectorMap<MapRegistry, long double>
106  DEFAULT_MAP_BODY(VectorMap, long double);
107
108  template <typename MapRegistry, typename Type>
109  class DefaultMap<MapRegistry, Type*>
110    : public VectorMap<MapRegistry, Type*>
111  DEFAULT_MAP_BODY(VectorMap, Type*);
112
113}
114
115#endif
Note: See TracBrowser for help on using the repository browser.