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/] [tr1/] [unordered_set.h] - Blame information for rev 35

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 35 ultra_embe
// TR1 unordered_set implementation -*- C++ -*-
2
 
3
// Copyright (C) 2010 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
7
// terms of the GNU General Public License as published by the
8
// Free Software Foundation; either version 3, or (at your option)
9
// any later version.
10
 
11
// This library is distributed in the hope that it will be useful,
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
// GNU 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
/** @file tr1/unordered_set.h
26
 *  This is an internal header file, included by other library headers.
27
 *  Do not attempt to use it directly. @headername{tr1/unordered_set}
28
 */
29
 
30
namespace std _GLIBCXX_VISIBILITY(default)
31
{
32
namespace tr1
33
{
34
_GLIBCXX_BEGIN_NAMESPACE_VERSION
35
 
36
  // NB: When we get typedef templates these class definitions
37
  // will be unnecessary.
38
  template<class _Value,
39
           class _Hash = hash<_Value>,
40
           class _Pred = std::equal_to<_Value>,
41
           class _Alloc = std::allocator<_Value>,
42
           bool __cache_hash_code = false>
43
    class __unordered_set
44
    : public _Hashtable<_Value, _Value, _Alloc,
45
                        std::_Identity<_Value>, _Pred,
46
                        _Hash, __detail::_Mod_range_hashing,
47
                        __detail::_Default_ranged_hash,
48
                        __detail::_Prime_rehash_policy,
49
                        __cache_hash_code, true, true>
50
    {
51
      typedef _Hashtable<_Value, _Value, _Alloc,
52
                         std::_Identity<_Value>, _Pred,
53
                         _Hash, __detail::_Mod_range_hashing,
54
                         __detail::_Default_ranged_hash,
55
                         __detail::_Prime_rehash_policy,
56
                         __cache_hash_code, true, true>
57
        _Base;
58
 
59
    public:
60
      typedef typename _Base::size_type       size_type;
61
      typedef typename _Base::hasher          hasher;
62
      typedef typename _Base::key_equal       key_equal;
63
      typedef typename _Base::allocator_type  allocator_type;
64
 
65
      explicit
66
      __unordered_set(size_type __n = 10,
67
                      const hasher& __hf = hasher(),
68
                      const key_equal& __eql = key_equal(),
69
                      const allocator_type& __a = allocator_type())
70
      : _Base(__n, __hf, __detail::_Mod_range_hashing(),
71
              __detail::_Default_ranged_hash(), __eql,
72
              std::_Identity<_Value>(), __a)
73
      { }
74
 
75
      template<typename _InputIterator>
76
        __unordered_set(_InputIterator __f, _InputIterator __l,
77
                        size_type __n = 10,
78
                        const hasher& __hf = hasher(),
79
                        const key_equal& __eql = key_equal(),
80
                        const allocator_type& __a = allocator_type())
81
        : _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(),
82
                __detail::_Default_ranged_hash(), __eql,
83
                std::_Identity<_Value>(), __a)
84
        { }
85
    };
86
 
87
  template<class _Value,
88
           class _Hash = hash<_Value>,
89
           class _Pred = std::equal_to<_Value>,
90
           class _Alloc = std::allocator<_Value>,
91
           bool __cache_hash_code = false>
92
    class __unordered_multiset
93
    : public _Hashtable<_Value, _Value, _Alloc,
94
                        std::_Identity<_Value>, _Pred,
95
                        _Hash, __detail::_Mod_range_hashing,
96
                        __detail::_Default_ranged_hash,
97
                        __detail::_Prime_rehash_policy,
98
                        __cache_hash_code, true, false>
99
    {
100
      typedef _Hashtable<_Value, _Value, _Alloc,
101
                         std::_Identity<_Value>, _Pred,
102
                         _Hash, __detail::_Mod_range_hashing,
103
                         __detail::_Default_ranged_hash,
104
                         __detail::_Prime_rehash_policy,
105
                         __cache_hash_code, true, false>
106
        _Base;
107
 
108
    public:
109
      typedef typename _Base::size_type       size_type;
110
      typedef typename _Base::hasher          hasher;
111
      typedef typename _Base::key_equal       key_equal;
112
      typedef typename _Base::allocator_type  allocator_type;
113
 
114
      explicit
115
      __unordered_multiset(size_type __n = 10,
116
                           const hasher& __hf = hasher(),
117
                           const key_equal& __eql = key_equal(),
118
                           const allocator_type& __a = allocator_type())
119
      : _Base(__n, __hf, __detail::_Mod_range_hashing(),
120
              __detail::_Default_ranged_hash(), __eql,
121
              std::_Identity<_Value>(), __a)
122
      { }
123
 
124
 
125
      template<typename _InputIterator>
126
        __unordered_multiset(_InputIterator __f, _InputIterator __l,
127
                             typename _Base::size_type __n = 0,
128
                             const hasher& __hf = hasher(),
129
                             const key_equal& __eql = key_equal(),
130
                             const allocator_type& __a = allocator_type())
131
        : _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(),
132
                __detail::_Default_ranged_hash(), __eql,
133
                std::_Identity<_Value>(), __a)
134
        { }
135
    };
136
 
137
  template<class _Value, class _Hash, class _Pred, class _Alloc,
138
           bool __cache_hash_code>
139
    inline void
140
    swap(__unordered_set<_Value, _Hash, _Pred, _Alloc, __cache_hash_code>& __x,
141
         __unordered_set<_Value, _Hash, _Pred, _Alloc, __cache_hash_code>& __y)
142
    { __x.swap(__y); }
143
 
144
  template<class _Value, class _Hash, class _Pred, class _Alloc,
145
           bool __cache_hash_code>
146
    inline void
147
    swap(__unordered_multiset<_Value, _Hash, _Pred,
148
         _Alloc, __cache_hash_code>& __x,
149
         __unordered_multiset<_Value, _Hash, _Pred,
150
         _Alloc, __cache_hash_code>& __y)
151
    { __x.swap(__y); }
152
 
153
 
154
  /**
155
   *  @brief A standard container composed of unique keys (containing
156
   *  at most one of each key value) in which the elements' keys are
157
   *  the elements themselves.
158
   *
159
   *  @ingroup unordered_associative_containers
160
   *
161
   *  Meets the requirements of a <a href="tables.html#65">container</a>, and
162
   *  <a href="tables.html#xx">unordered associative container</a>
163
   *
164
   *  @param  Value  Type of key objects.
165
   *  @param  Hash  Hashing function object type, defaults to hash<Value>.
166
   *  @param  Pred  Predicate function object type, defaults to equal_to<Value>.
167
   *  @param  Alloc  Allocator type, defaults to allocator<Key>.
168
   */
169
  template<class _Value,
170
           class _Hash = hash<_Value>,
171
           class _Pred = std::equal_to<_Value>,
172
           class _Alloc = std::allocator<_Value> >
173
    class unordered_set
174
    : public __unordered_set<_Value, _Hash, _Pred, _Alloc>
175
    {
176
      typedef __unordered_set<_Value, _Hash, _Pred, _Alloc>  _Base;
177
 
178
    public:
179
      typedef typename _Base::value_type      value_type;
180
      typedef typename _Base::size_type       size_type;
181
      typedef typename _Base::hasher          hasher;
182
      typedef typename _Base::key_equal       key_equal;
183
      typedef typename _Base::allocator_type  allocator_type;
184
 
185
      explicit
186
      unordered_set(size_type __n = 10,
187
                    const hasher& __hf = hasher(),
188
                    const key_equal& __eql = key_equal(),
189
                    const allocator_type& __a = allocator_type())
190
      : _Base(__n, __hf, __eql, __a)
191
      { }
192
 
193
      template<typename _InputIterator>
194
        unordered_set(_InputIterator __f, _InputIterator __l,
195
                      size_type __n = 10,
196
                      const hasher& __hf = hasher(),
197
                      const key_equal& __eql = key_equal(),
198
                      const allocator_type& __a = allocator_type())
199
        : _Base(__f, __l, __n, __hf, __eql, __a)
200
        { }
201
    };
202
 
203
  /**
204
   *  @brief A standard container composed of equivalent keys
205
   *  (possibly containing multiple of each key value) in which the
206
   *  elements' keys are the elements themselves.
207
   *
208
   *  @ingroup unordered_associative_containers
209
   *
210
   *  Meets the requirements of a <a href="tables.html#65">container</a>, and
211
   *  <a href="tables.html#xx">unordered associative container</a>
212
   *
213
   *  @param  Value  Type of key objects.
214
   *  @param  Hash  Hashing function object type, defaults to hash<Value>.
215
   *  @param  Pred  Predicate function object type, defaults to equal_to<Value>.
216
   *  @param  Alloc  Allocator type, defaults to allocator<Key>.
217
   */
218
  template<class _Value,
219
           class _Hash = hash<_Value>,
220
           class _Pred = std::equal_to<_Value>,
221
           class _Alloc = std::allocator<_Value> >
222
    class unordered_multiset
223
    : public __unordered_multiset<_Value, _Hash, _Pred, _Alloc>
224
    {
225
      typedef __unordered_multiset<_Value, _Hash, _Pred, _Alloc>  _Base;
226
 
227
    public:
228
      typedef typename _Base::value_type      value_type;
229
      typedef typename _Base::size_type       size_type;
230
      typedef typename _Base::hasher          hasher;
231
      typedef typename _Base::key_equal       key_equal;
232
      typedef typename _Base::allocator_type  allocator_type;
233
 
234
      explicit
235
      unordered_multiset(size_type __n = 10,
236
                         const hasher& __hf = hasher(),
237
                         const key_equal& __eql = key_equal(),
238
                         const allocator_type& __a = allocator_type())
239
      : _Base(__n, __hf, __eql, __a)
240
      { }
241
 
242
 
243
      template<typename _InputIterator>
244
        unordered_multiset(_InputIterator __f, _InputIterator __l,
245
                           typename _Base::size_type __n = 0,
246
                           const hasher& __hf = hasher(),
247
                           const key_equal& __eql = key_equal(),
248
                           const allocator_type& __a = allocator_type())
249
        : _Base(__f, __l, __n, __hf, __eql, __a)
250
        { }
251
    };
252
 
253
  template<class _Value, class _Hash, class _Pred, class _Alloc>
254
    inline void
255
    swap(unordered_set<_Value, _Hash, _Pred, _Alloc>& __x,
256
         unordered_set<_Value, _Hash, _Pred, _Alloc>& __y)
257
    { __x.swap(__y); }
258
 
259
  template<class _Value, class _Hash, class _Pred, class _Alloc>
260
    inline void
261
    swap(unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
262
         unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y)
263
    { __x.swap(__y); }
264
 
265
_GLIBCXX_END_NAMESPACE_VERSION
266
}
267
}

powered by: WebSVN 2.1.0

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