OpenCores
URL https://opencores.org/ocsvn/altor32/altor32/trunk

Subversion Repositories altor32

[/] [altor32/] [trunk/] [gcc-x64/] [or1knd-elf/] [or1knd-elf/] [include/] [c++/] [4.8.0/] [ext/] [pb_ds/] [detail/] [container_base_dispatch.hpp] - Blame information for rev 35

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 35 ultra_embe
// -*- C++ -*-
2
 
3
// Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc.
4
//
5
// This file is part of the GNU ISO C++ Library.  This library is free
6
// software; you can redistribute it and/or modify it under the terms
7
// of the GNU General Public License as published by the Free Software
8
// Foundation; either version 3, or (at your option) any later
9
// version.
10
 
11
// This library is distributed in the hope that it will be useful, but
12
// WITHOUT ANY WARRANTY; without even the implied warranty of
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
// General Public License for more details.
15
 
16
// Under Section 7 of GPL version 3, you are granted additional
17
// permissions described in the GCC Runtime Library Exception, version
18
// 3.1, as published by the Free Software Foundation.
19
 
20
// You should have received a copy of the GNU General Public License and
21
// a copy of the GCC Runtime Library Exception along with this program;
22
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23
// <http://www.gnu.org/licenses/>.
24
 
25
// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
26
 
27
// Permission to use, copy, modify, sell, and distribute this software
28
// is hereby granted without fee, provided that the above copyright
29
// notice appears in all copies, and that both that copyright notice
30
// and this permission notice appear in supporting documentation. None
31
// of the above authors, nor IBM Haifa Research Laboratories, make any
32
// representation about the suitability of this software for any
33
// purpose. It is provided "as is" without express or implied
34
// warranty.
35
 
36
/**
37
 * @file container_base_dispatch.hpp
38
 * Contains associative container dispatching.
39
 */
40
 
41
#ifndef PB_DS_ASSOC_CNTNR_BASE_DS_DISPATCHER_HPP
42
#define PB_DS_ASSOC_CNTNR_BASE_DS_DISPATCHER_HPP
43
 
44
#include <ext/typelist.h>
45
 
46
#define PB_DS_ASSERT_VALID(X)                                           \
47
  _GLIBCXX_DEBUG_ONLY(X.assert_valid(__FILE__, __LINE__);)
48
 
49
#define PB_DS_DEBUG_VERIFY(_Cond)                                       \
50
  _GLIBCXX_DEBUG_VERIFY_AT(_Cond,                                       \
51
                           _M_message(#_Cond" assertion from %1;:%2;")  \
52
                           ._M_string(__FILE__)._M_integer(__LINE__)    \
53
                           ,__file,__line)
54
 
55
#define PB_DS_CHECK_KEY_EXISTS(_Key)                                    \
56
  _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(_Key, __FILE__, __LINE__);)
57
 
58
#define PB_DS_CHECK_KEY_DOES_NOT_EXIST(_Key)                            \
59
  _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(_Key,        \
60
                                                           __FILE__, __LINE__);)
61
 
62
#define PB_DS_DATA_TRUE_INDICATOR
63
#define PB_DS_V2F(X) (X).first
64
#define PB_DS_V2S(X) (X).second
65
#define PB_DS_EP2VP(X)& ((X)->m_value)
66
#include <ext/pb_ds/detail/list_update_map_/lu_map_.hpp>
67
#include <ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp>
68
#include <ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp>
69
#include <ext/pb_ds/detail/splay_tree_/splay_tree_.hpp>
70
#include <ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp>
71
#include <ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp>
72
#include <ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp>
73
#include <ext/pb_ds/detail/pat_trie_/pat_trie_.hpp>
74
#undef PB_DS_DATA_TRUE_INDICATOR
75
#undef PB_DS_V2F
76
#undef PB_DS_V2S
77
#undef PB_DS_EP2VP
78
 
79
#define PB_DS_DATA_FALSE_INDICATOR
80
#define PB_DS_V2F(X) (X)
81
#define PB_DS_V2S(X) Mapped_Data()
82
#define PB_DS_EP2VP(X)& ((X)->m_value.first)
83
#include <ext/pb_ds/detail/list_update_map_/lu_map_.hpp>
84
#include <ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp>
85
#include <ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp>
86
#include <ext/pb_ds/detail/splay_tree_/splay_tree_.hpp>
87
#include <ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp>
88
#include <ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp>
89
#include <ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp>
90
#include <ext/pb_ds/detail/pat_trie_/pat_trie_.hpp>
91
#undef PB_DS_DATA_FALSE_INDICATOR
92
#undef PB_DS_V2F
93
#undef PB_DS_V2S
94
#undef PB_DS_EP2VP
95
 
96
#undef PB_DS_CHECK_KEY_DOES_NOT_EXIST
97
#undef PB_DS_CHECK_KEY_EXISTS
98
#undef PB_DS_DEBUG_VERIFY
99
#undef PB_DS_ASSERT_VALID
100
 
101
namespace __gnu_pbds
102
{
103
namespace detail
104
{
105
  /// Specialization for list-update map.
106
  template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl>
107
    struct container_base_dispatch<Key, Mapped, _Alloc, list_update_tag,
108
                                   Policy_Tl>
109
    {
110
    private:
111
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0>        at0;
112
      typedef typename at0::type                                at0t;
113
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1>       at1;
114
      typedef typename at1::type                                at1t;
115
 
116
    public:
117
      /// Dispatched type.
118
      typedef lu_map<Key, Mapped, at0t, _Alloc, at1t>   type;
119
    };
120
 
121
  /// Specialization for list-update set.
122
  template<typename Key, typename _Alloc, typename Policy_Tl>
123
    struct container_base_dispatch<Key, null_type, _Alloc, list_update_tag,
124
                                   Policy_Tl>
125
    {
126
    private:
127
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0>        at0;
128
      typedef typename at0::type                                at0t;
129
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1>       at1;
130
      typedef typename at1::type                                at1t;
131
 
132
    public:
133
      /// Dispatched type.
134
      typedef lu_set<Key, null_type, at0t, _Alloc, at1t> type;
135
    };
136
 
137
  /// Specialization for PATRICIA trie map.
138
  template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl>
139
  struct container_base_dispatch<Key, Mapped, _Alloc, pat_trie_tag, Policy_Tl>
140
    {
141
    private:
142
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1>       at1;
143
      typedef typename at1::type                                at1t;
144
 
145
    public:
146
      typedef pat_trie_map<Key, Mapped, at1t, _Alloc>           type;
147
    };
148
 
149
  /// Specialization for PATRICIA trie set.
150
  template<typename Key, typename _Alloc, typename Policy_Tl>
151
    struct container_base_dispatch<Key, null_type, _Alloc, pat_trie_tag,
152
                                   Policy_Tl>
153
    {
154
    private:
155
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1>       at1;
156
      typedef typename at1::type                                at1t;
157
 
158
    public:
159
      /// Dispatched type.
160
      typedef pat_trie_set<Key, null_type, at1t, _Alloc> type;
161
    };
162
 
163
  /// Specialization for R-B tree map.
164
  template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl>
165
    struct container_base_dispatch<Key, Mapped, _Alloc, rb_tree_tag, Policy_Tl>
166
    {
167
    private:
168
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0>        at0;
169
      typedef typename at0::type                                at0t;
170
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1>       at1;
171
      typedef typename at1::type                                at1t;
172
 
173
    public:
174
      /// Dispatched type.
175
      typedef rb_tree_map<Key, Mapped, at0t, at1t, _Alloc>      type;
176
    };
177
 
178
  /// Specialization for R-B tree set.
179
  template<typename Key, typename _Alloc, typename Policy_Tl>
180
    struct container_base_dispatch<Key, null_type, _Alloc, rb_tree_tag,
181
                                   Policy_Tl>
182
    {
183
    private:
184
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0>        at0;
185
      typedef typename at0::type                                at0t;
186
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1>       at1;
187
      typedef typename at1::type                                at1t;
188
 
189
    public:
190
      typedef rb_tree_set<Key, null_type, at0t, at1t, _Alloc> type;
191
    };
192
 
193
  /// Specialization splay tree map.
194
  template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl>
195
  struct container_base_dispatch<Key, Mapped, _Alloc, splay_tree_tag,
196
                                   Policy_Tl>
197
    {
198
    private:
199
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0>        at0;
200
      typedef typename at0::type                                at0t;
201
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1>       at1;
202
      typedef typename at1::type                                at1t;
203
 
204
    public:
205
      /// Dispatched type.
206
      typedef splay_tree_map<Key, Mapped, at0t, at1t, _Alloc>   type;
207
    };
208
 
209
  /// Specialization splay tree set.
210
  template<typename Key, typename _Alloc, typename Policy_Tl>
211
    struct container_base_dispatch<Key, null_type, _Alloc, splay_tree_tag,
212
                                   Policy_Tl>
213
    {
214
    private:
215
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0>        at0;
216
      typedef typename at0::type                                at0t;
217
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1>       at1;
218
      typedef typename at1::type                                at1t;
219
 
220
    public:
221
      /// Dispatched type.
222
      typedef splay_tree_set<Key, null_type, at0t, at1t, _Alloc> type;
223
  };
224
 
225
    /// Specialization ordered-vector tree map.
226
  template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl>
227
    struct container_base_dispatch<Key, Mapped, _Alloc, ov_tree_tag, Policy_Tl>
228
    {
229
    private:
230
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0>        at0;
231
      typedef typename at0::type                                at0t;
232
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1>       at1;
233
      typedef typename at1::type                                at1t;
234
 
235
    public:
236
      /// Dispatched type.
237
      typedef ov_tree_map<Key, Mapped, at0t, at1t, _Alloc>      type;
238
  };
239
 
240
    /// Specialization ordered-vector tree set.
241
  template<typename Key, typename _Alloc, typename Policy_Tl>
242
    struct container_base_dispatch<Key, null_type, _Alloc, ov_tree_tag,
243
                                   Policy_Tl>
244
    {
245
    private:
246
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0>        at0;
247
      typedef typename at0::type                                at0t;
248
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1>       at1;
249
      typedef typename at1::type                                at1t;
250
 
251
    public:
252
      /// Dispatched type.
253
      typedef ov_tree_set<Key, null_type, at0t, at1t, _Alloc> type;
254
  };
255
 
256
    /// Specialization colision-chaining hash map.
257
  template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl>
258
    struct container_base_dispatch<Key, Mapped, _Alloc, cc_hash_tag, Policy_Tl>
259
    {
260
    private:
261
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0>        at0;
262
      typedef typename at0::type                                at0t;
263
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1>       at1;
264
      typedef typename at1::type                                at1t;
265
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 2>       at2;
266
      typedef typename at2::type                                at2t;
267
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 3>       at3;
268
      typedef typename at3::type                                at3t;
269
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 4>       at4;
270
      typedef typename at4::type                                at4t;
271
 
272
    public:
273
      /// Dispatched type.
274
      typedef cc_ht_map<Key, Mapped, at0t, at1t, _Alloc,
275
                        at3t::value, at4t, at2t>                type;
276
  };
277
 
278
    /// Specialization colision-chaining hash set.
279
  template<typename Key, typename _Alloc, typename Policy_Tl>
280
    struct container_base_dispatch<Key, null_type, _Alloc, cc_hash_tag,
281
                                   Policy_Tl>
282
    {
283
    private:
284
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0>        at0;
285
      typedef typename at0::type                                at0t;
286
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1>       at1;
287
      typedef typename at1::type                                at1t;
288
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 2>       at2;
289
      typedef typename at2::type                                at2t;
290
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 3>       at3;
291
      typedef typename at3::type                                at3t;
292
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 4>       at4;
293
      typedef typename at4::type                                at4t;
294
 
295
    public:
296
      /// Dispatched type.
297
      typedef cc_ht_set<Key, null_type, at0t, at1t, _Alloc,
298
                                 at3t::value, at4t, at2t>       type;
299
  };
300
 
301
    /// Specialization general-probe hash map.
302
  template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl>
303
    struct container_base_dispatch<Key, Mapped, _Alloc, gp_hash_tag, Policy_Tl>
304
    {
305
    private:
306
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0>        at0;
307
      typedef typename at0::type                                at0t;
308
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1>       at1;
309
      typedef typename at1::type                                at1t;
310
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 2>       at2;
311
      typedef typename at2::type                                at2t;
312
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 3>       at3;
313
      typedef typename at3::type                                at3t;
314
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 4>       at4;
315
      typedef typename at4::type                                at4t;
316
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 5>       at5;
317
      typedef typename at5::type                                at5t;
318
 
319
    public:
320
      /// Dispatched type.
321
      typedef gp_ht_map<Key, Mapped, at0t, at1t, _Alloc,
322
                        at3t::value, at4t, at5t, at2t>          type;
323
  };
324
 
325
    /// Specialization general-probe hash set.
326
  template<typename Key, typename _Alloc, typename Policy_Tl>
327
    struct container_base_dispatch<Key, null_type, _Alloc, gp_hash_tag,
328
                                   Policy_Tl>
329
    {
330
    private:
331
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0>        at0;
332
      typedef typename at0::type                                at0t;
333
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1>       at1;
334
      typedef typename at1::type                                at1t;
335
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 2>       at2;
336
      typedef typename at2::type                                at2t;
337
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 3>       at3;
338
      typedef typename at3::type                                at3t;
339
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 4>       at4;
340
      typedef typename at4::type                                at4t;
341
      typedef __gnu_cxx::typelist::at_index<Policy_Tl, 5>       at5;
342
      typedef typename at5::type                                at5t;
343
 
344
    public:
345
      /// Dispatched type.
346
      typedef gp_ht_set<Key, null_type, at0t, at1t, _Alloc,
347
                        at3t::value, at4t, at5t, at2t>          type;
348
  };
349
} // namespace detail
350
} // namespace __gnu_pbds
351
 
352
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.