]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/libstdc++-v3/contrib/libstdc++-v3-4.3.3/include/tr1_impl/unordered_map
Inital import
[l4.git] / l4 / pkg / libstdc++-v3 / contrib / libstdc++-v3-4.3.3 / include / tr1_impl / unordered_map
1 // TR1 unordered_map -*- C++ -*-
2
3 // Copyright (C) 2007 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 2, 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 // You should have received a copy of the GNU General Public License along
17 // with this library; see the file COPYING.  If not, write to the Free
18 // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
19 // USA.
20
21 // As a special exception, you may use this file as part of a free software
22 // library without restriction.  Specifically, if other files instantiate
23 // templates or use macros or inline functions from this file, or you compile
24 // this file and link it with other files to produce an executable, this
25 // file does not by itself cause the resulting executable to be covered by
26 // the GNU General Public License.  This exception does not however
27 // invalidate any other reasons why the executable file might be covered by
28 // the GNU General Public License.
29
30 /** @file tr1_impl/unordered_map
31  *  This is an internal header file, included by other library headers.
32  *  You should not attempt to use it directly.
33  */
34
35 namespace std
36 {
37 _GLIBCXX_BEGIN_NAMESPACE_TR1
38
39   // XXX When we get typedef templates these class definitions
40   // will be unnecessary.
41   template<class _Key, class _Tp,
42            class _Hash = hash<_Key>,
43            class _Pred = std::equal_to<_Key>,
44            class _Alloc = std::allocator<std::pair<const _Key, _Tp> >,
45            bool __cache_hash_code = false>
46     class __unordered_map
47     : public _Hashtable<_Key, std::pair<const _Key, _Tp>, _Alloc,
48                         std::_Select1st<std::pair<const _Key, _Tp> >, _Pred, 
49                         _Hash, __detail::_Mod_range_hashing,
50                         __detail::_Default_ranged_hash,
51                         __detail::_Prime_rehash_policy,
52                         __cache_hash_code, false, true>
53     {
54       typedef _Hashtable<_Key, std::pair<const _Key, _Tp>, _Alloc,
55                          std::_Select1st<std::pair<const _Key, _Tp> >, _Pred,
56                          _Hash, __detail::_Mod_range_hashing,
57                          __detail::_Default_ranged_hash,
58                          __detail::_Prime_rehash_policy,
59                          __cache_hash_code, false, true>
60         _Base;
61
62     public:
63       typedef typename _Base::size_type       size_type;
64       typedef typename _Base::hasher          hasher;
65       typedef typename _Base::key_equal       key_equal;
66       typedef typename _Base::allocator_type  allocator_type;
67
68       explicit
69       __unordered_map(size_type __n = 10,
70                       const hasher& __hf = hasher(),
71                       const key_equal& __eql = key_equal(),
72                       const allocator_type& __a = allocator_type())
73       : _Base(__n, __hf, __detail::_Mod_range_hashing(),
74               __detail::_Default_ranged_hash(),
75               __eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
76       { }
77
78       template<typename _InputIterator>
79         __unordered_map(_InputIterator __f, _InputIterator __l, 
80                         size_type __n = 10,
81                         const hasher& __hf = hasher(), 
82                         const key_equal& __eql = key_equal(), 
83                         const allocator_type& __a = allocator_type())
84         : _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(),
85                 __detail::_Default_ranged_hash(),
86                 __eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
87         { }
88
89 #ifdef _GLIBCXX_INCLUDE_AS_CXX0X
90       __unordered_map(__unordered_map&& __x)
91       : _Base(std::forward<_Base>(__x)) { }
92 #endif
93     };
94   
95   template<class _Key, class _Tp,
96            class _Hash = hash<_Key>,
97            class _Pred = std::equal_to<_Key>,
98            class _Alloc = std::allocator<std::pair<const _Key, _Tp> >,
99            bool __cache_hash_code = false>
100     class __unordered_multimap
101     : public _Hashtable<_Key, std::pair<const _Key, _Tp>,
102                         _Alloc,
103                         std::_Select1st<std::pair<const _Key, _Tp> >, _Pred,
104                         _Hash, __detail::_Mod_range_hashing,
105                         __detail::_Default_ranged_hash,
106                         __detail::_Prime_rehash_policy,
107                         __cache_hash_code, false, false>
108     {
109       typedef _Hashtable<_Key, std::pair<const _Key, _Tp>,
110                          _Alloc,
111                          std::_Select1st<std::pair<const _Key, _Tp> >, _Pred,
112                          _Hash, __detail::_Mod_range_hashing,
113                          __detail::_Default_ranged_hash,
114                          __detail::_Prime_rehash_policy,
115                          __cache_hash_code, false, false>
116         _Base;
117
118     public:
119       typedef typename _Base::size_type       size_type;
120       typedef typename _Base::hasher          hasher;
121       typedef typename _Base::key_equal       key_equal;
122       typedef typename _Base::allocator_type  allocator_type;
123       
124       explicit
125       __unordered_multimap(size_type __n = 10,
126                            const hasher& __hf = hasher(),
127                            const key_equal& __eql = key_equal(),
128                            const allocator_type& __a = allocator_type())
129       : _Base(__n, __hf, __detail::_Mod_range_hashing(),
130               __detail::_Default_ranged_hash(),
131               __eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
132       { }
133
134
135       template<typename _InputIterator>
136         __unordered_multimap(_InputIterator __f, _InputIterator __l, 
137                              typename _Base::size_type __n = 0,
138                              const hasher& __hf = hasher(), 
139                              const key_equal& __eql = key_equal(), 
140                              const allocator_type& __a = allocator_type())
141         : _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(),
142                 __detail::_Default_ranged_hash(),
143                 __eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
144         { }
145
146 #ifdef _GLIBCXX_INCLUDE_AS_CXX0X
147       __unordered_multimap(__unordered_multimap&& __x)
148       : _Base(std::forward<_Base>(__x)) { }
149 #endif
150     };
151
152   template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc,
153            bool __cache_hash_code>
154     inline void
155     swap(__unordered_map<_Key, _Tp, _Hash, _Pred,
156          _Alloc, __cache_hash_code>& __x,
157          __unordered_map<_Key, _Tp, _Hash, _Pred,
158          _Alloc, __cache_hash_code>& __y)
159     { __x.swap(__y); }
160
161   template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc,
162            bool __cache_hash_code>
163     inline void
164     swap(__unordered_multimap<_Key, _Tp, _Hash, _Pred,
165          _Alloc, __cache_hash_code>& __x,
166          __unordered_multimap<_Key, _Tp, _Hash, _Pred,
167          _Alloc, __cache_hash_code>& __y)
168     { __x.swap(__y); }
169
170
171   /// class unordered_map
172   template<class _Key, class _Tp,
173            class _Hash = hash<_Key>,
174            class _Pred = std::equal_to<_Key>,
175            class _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
176     class unordered_map
177     : public __unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>
178     {
179       typedef __unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>  _Base;
180
181     public:
182       typedef typename _Base::size_type       size_type;
183       typedef typename _Base::hasher          hasher;
184       typedef typename _Base::key_equal       key_equal;
185       typedef typename _Base::allocator_type  allocator_type;
186
187       explicit
188       unordered_map(size_type __n = 10,
189                     const hasher& __hf = hasher(),
190                     const key_equal& __eql = key_equal(),
191                     const allocator_type& __a = allocator_type())
192       : _Base(__n, __hf, __eql, __a)
193       { }
194
195       template<typename _InputIterator>
196         unordered_map(_InputIterator __f, _InputIterator __l, 
197                       size_type __n = 10,
198                       const hasher& __hf = hasher(), 
199                       const key_equal& __eql = key_equal(), 
200                       const allocator_type& __a = allocator_type())
201         : _Base(__f, __l, __n, __hf, __eql, __a)
202         { }
203
204 #ifdef _GLIBCXX_INCLUDE_AS_CXX0X
205       unordered_map(unordered_map&& __x)
206       : _Base(std::forward<_Base>(__x)) { }
207
208       unordered_map&
209       operator=(unordered_map&& __x)
210       {
211         // NB: DR 675.
212         this->clear();
213         this->swap(__x); 
214         return *this;   
215       }
216 #endif
217     };
218   
219   /// class unordered_multimap
220   template<class _Key, class _Tp,
221            class _Hash = hash<_Key>,
222            class _Pred = std::equal_to<_Key>,
223            class _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
224     class unordered_multimap
225     : public __unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>
226     {
227       typedef __unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>  _Base;
228
229     public:
230       typedef typename _Base::size_type       size_type;
231       typedef typename _Base::hasher          hasher;
232       typedef typename _Base::key_equal       key_equal;
233       typedef typename _Base::allocator_type  allocator_type;
234       
235       explicit
236       unordered_multimap(size_type __n = 10,
237                          const hasher& __hf = hasher(),
238                          const key_equal& __eql = key_equal(),
239                          const allocator_type& __a = allocator_type())
240       : _Base(__n, __hf, __eql, __a)
241       { }
242
243
244       template<typename _InputIterator>
245         unordered_multimap(_InputIterator __f, _InputIterator __l, 
246                            typename _Base::size_type __n = 0,
247                            const hasher& __hf = hasher(), 
248                            const key_equal& __eql = key_equal(), 
249                            const allocator_type& __a = allocator_type())
250         : _Base(__f, __l, __n, __hf, __eql, __a)
251         { }
252
253 #ifdef _GLIBCXX_INCLUDE_AS_CXX0X
254       unordered_multimap(unordered_multimap&& __x)
255       : _Base(std::forward<_Base>(__x)) { }
256
257       unordered_multimap&
258       operator=(unordered_multimap&& __x)
259       {
260         // NB: DR 675.
261         this->clear();
262         this->swap(__x); 
263         return *this;   
264       }
265 #endif
266     };
267
268   template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
269     inline void
270     swap(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
271          unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
272     { __x.swap(__y); }
273
274   template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
275     inline void
276     swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
277          unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
278     { __x.swap(__y); }
279
280 #ifdef _GLIBCXX_INCLUDE_AS_CXX0X
281   template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
282     inline void
283     swap(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>&& __x,
284          unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
285     { __x.swap(__y); }
286
287   template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
288     inline void
289     swap(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
290          unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>&& __y)
291     { __x.swap(__y); }
292
293   template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
294     inline void
295     swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>&& __x,
296          unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
297     { __x.swap(__y); }
298
299   template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
300     inline void
301     swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
302          unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>&& __y)
303     { __x.swap(__y); }
304 #endif
305
306 _GLIBCXX_END_NAMESPACE_TR1
307 }