COIN-OR::LEMON - Graph Library

source: lemon-0.x/lemon/bits/default_map.h @ 2202:09cbc87cb4ab

Last change on this file since 2202:09cbc87cb4ab was 2202:09cbc87cb4ab, checked in by Balazs Dezso, 13 years ago

New map type based on array map for debugging purpose

It checks multiple allocation and deallocation of map values and
some consistency.

todo:
clarification of debugging concepts
assertions - exceptions - debug
revision of attic/debug.h

motto:
testing is at least so important as coding

File size: 4.7 KB
Line 
1/* -*- C++ -*-
2 *
3 * This file is a part of LEMON, a generic C++ optimization library
4 *
5 * Copyright (C) 2003-2006
6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
7 * (Egervary Research Group on Combinatorial Optimization, EGRES).
8 *
9 * Permission to use, modify and distribute this software is granted
10 * provided that this copyright notice appears in all copies. For
11 * precise terms see the accompanying LICENSE file.
12 *
13 * This software is provided "AS IS" with no warranty of any kind,
14 * express or implied, and with no claim as to its suitability for any
15 * purpose.
16 *
17 */
18
19#ifndef LEMON_BITS_DEFAULT_MAP_H
20#define LEMON_BITS_DEFAULT_MAP_H
21
22
23#include <lemon/bits/array_map.h>
24#include <lemon/bits/vector_map.h>
25#include <lemon/bits/debug_map.h>
26
27///\ingroup graphbits
28///\file
29///\brief Graph maps that construct and destruct their elements dynamically.
30
31namespace lemon {
32 
33 
34#ifndef _GLIBCXX_DEBUG
35
36  template <typename _Graph, typename _Item, typename _Value>
37  struct DefaultMapSelector {
38    typedef ArrayMap<_Graph, _Item, _Value> Map;
39  };
40
41  // bool
42  template <typename _Graph, typename _Item>
43  struct DefaultMapSelector<_Graph, _Item, bool> {
44    typedef VectorMap<_Graph, _Item, bool> Map;
45  };
46
47  // char
48  template <typename _Graph, typename _Item>
49  struct DefaultMapSelector<_Graph, _Item, char> {
50    typedef VectorMap<_Graph, _Item, char> Map;
51  };
52
53  template <typename _Graph, typename _Item>
54  struct DefaultMapSelector<_Graph, _Item, signed char> {
55    typedef VectorMap<_Graph, _Item, signed char> Map;
56  };
57
58  template <typename _Graph, typename _Item>
59  struct DefaultMapSelector<_Graph, _Item, unsigned char> {
60    typedef VectorMap<_Graph, _Item, unsigned char> Map;
61  };
62
63
64  // int
65  template <typename _Graph, typename _Item>
66  struct DefaultMapSelector<_Graph, _Item, signed int> {
67    typedef VectorMap<_Graph, _Item, signed int> Map;
68  };
69
70  template <typename _Graph, typename _Item>
71  struct DefaultMapSelector<_Graph, _Item, unsigned int> {
72    typedef VectorMap<_Graph, _Item, unsigned int> Map;
73  };
74
75
76  // short
77  template <typename _Graph, typename _Item>
78  struct DefaultMapSelector<_Graph, _Item, signed short> {
79    typedef VectorMap<_Graph, _Item, signed short> Map;
80  };
81
82  template <typename _Graph, typename _Item>
83  struct DefaultMapSelector<_Graph, _Item, unsigned short> {
84    typedef VectorMap<_Graph, _Item, unsigned short> Map;
85  };
86
87
88  // long
89  template <typename _Graph, typename _Item>
90  struct DefaultMapSelector<_Graph, _Item, signed long> {
91    typedef VectorMap<_Graph, _Item, signed long> Map;
92  };
93
94  template <typename _Graph, typename _Item>
95  struct DefaultMapSelector<_Graph, _Item, unsigned long> {
96    typedef VectorMap<_Graph, _Item, unsigned long> Map;
97  };
98
99
100#if defined __GNUC__ && !defined __STRICT_ANSI__
101
102  // long long
103  template <typename _Graph, typename _Item>
104  struct DefaultMapSelector<_Graph, _Item, signed long long> {
105    typedef VectorMap<_Graph, _Item, signed long long> Map;
106  };
107
108  template <typename _Graph, typename _Item>
109  struct DefaultMapSelector<_Graph, _Item, unsigned long long> {
110    typedef VectorMap<_Graph, _Item, unsigned long long> Map;
111  };
112
113#endif
114
115
116  // float
117  template <typename _Graph, typename _Item>
118  struct DefaultMapSelector<_Graph, _Item, float> {
119    typedef VectorMap<_Graph, _Item, float> Map;
120  };
121
122
123  // double
124  template <typename _Graph, typename _Item>
125  struct DefaultMapSelector<_Graph, _Item, double> {
126    typedef VectorMap<_Graph, _Item,  double> Map;
127  };
128
129
130  // long double
131  template <typename _Graph, typename _Item>
132  struct DefaultMapSelector<_Graph, _Item, long double> {
133    typedef VectorMap<_Graph, _Item, long double> Map;
134  };
135
136
137  // pointer
138  template <typename _Graph, typename _Item, typename _Ptr>
139  struct DefaultMapSelector<_Graph, _Item, _Ptr*> {
140    typedef VectorMap<_Graph, _Item, _Ptr*> Map;
141  };
142
143#else
144
145  template <typename _Graph, typename _Item, typename _Value>
146  struct DefaultMapSelector {
147    typedef DebugMap<_Graph, _Item, _Value> Map;
148  };
149
150#endif 
151
152  /// \e
153  template <typename _Graph, typename _Item, typename _Value>
154  class DefaultMap
155    : public DefaultMapSelector<_Graph, _Item, _Value>::Map {
156  public:
157    typedef typename DefaultMapSelector<_Graph, _Item, _Value>::Map Parent;
158    typedef DefaultMap<_Graph, _Item, _Value> Map;
159   
160    typedef typename Parent::Graph Graph;
161    typedef typename Parent::Value Value;
162
163    explicit DefaultMap(const Graph& graph) : Parent(graph) {}
164    DefaultMap(const Graph& graph, const Value& value)
165      : Parent(graph, value) {}
166
167    DefaultMap& operator=(const DefaultMap& cmap) {
168      return operator=<DefaultMap>(cmap);
169    }
170
171    template <typename CMap>
172    DefaultMap& operator=(const CMap& cmap) {
173      Parent::operator=(cmap);
174      return *this;
175    }
176
177  };
178
179}
180
181#endif
Note: See TracBrowser for help on using the repository browser.