28 #ifndef _GLIBCXX_PROFILE_UNORDERED_SET
29 #define _GLIBCXX_PROFILE_UNORDERED_SET 1
31 #if __cplusplus < 201103L
39 #define _GLIBCXX_BASE unordered_set<_Key, _Hash, _Pred, _Alloc>
40 #define _GLIBCXX_STD_BASE _GLIBCXX_STD_C::_GLIBCXX_BASE
42 namespace std _GLIBCXX_VISIBILITY(default)
47 template<
typename _Key,
52 :
public _GLIBCXX_STD_BASE,
53 public _Unordered_profile<unordered_set<_Key, _Hash, _Pred, _Alloc>,
56 typedef _GLIBCXX_STD_BASE
_Base;
59 _M_base() noexcept {
return *
this; }
62 _M_base()
const noexcept {
return *
this; }
65 typedef typename _Base::size_type size_type;
66 typedef typename _Base::hasher hasher;
67 typedef typename _Base::key_equal key_equal;
68 typedef typename _Base::allocator_type allocator_type;
69 typedef typename _Base::key_type key_type;
70 typedef typename _Base::value_type value_type;
71 typedef typename _Base::difference_type difference_type;
72 typedef typename _Base::reference reference;
73 typedef typename _Base::const_reference const_reference;
75 typedef typename _Base::iterator iterator;
76 typedef typename _Base::const_iterator const_iterator;
80 const hasher& __hf = hasher(),
81 const key_equal& __eql = key_equal(),
82 const allocator_type& __a = allocator_type())
83 :
_Base(__n, __hf, __eql, __a)
86 template<
typename _InputIterator>
89 const hasher& __hf = hasher(),
90 const key_equal& __eql = key_equal(),
91 const allocator_type& __a = allocator_type())
92 :
_Base(__f, __l, __n, __hf, __eql, __a)
109 const allocator_type& __a)
110 :
_Base(__uset._M_base(), __a)
114 const allocator_type& __a)
115 :
_Base(std::move(__uset._M_base()), __a)
120 const hasher& __hf = hasher(),
121 const key_equal& __eql = key_equal(),
122 const allocator_type& __a = allocator_type())
123 :
_Base(__l, __n, __hf, __eql, __a)
141 noexcept( noexcept(__x._M_base().swap(__x)) )
142 { _Base::swap(__x); }
147 __profcxx_hashtable_destruct(
this, _Base::bucket_count(),
149 this->_M_profile_destruct();
153 template<
typename... _Args>
155 emplace(_Args&&... __args)
157 size_type __old_size = _Base::bucket_count();
159 = _Base::emplace(std::forward<_Args>(__args)...);
160 _M_profile_resize(__old_size);
164 template<
typename... _Args>
166 emplace_hint(const_iterator __it, _Args&&... __args)
168 size_type __old_size = _Base::bucket_count();
170 = _Base::emplace_hint(__it, std::forward<_Args>(__args)...);
171 _M_profile_resize(__old_size);
178 size_type __old_size = _Base::bucket_count();
180 _M_profile_resize(__old_size);
184 insert(
const value_type& __obj)
186 size_type __old_size = _Base::bucket_count();
188 _M_profile_resize(__old_size);
193 insert(const_iterator __iter,
const value_type& __v)
195 size_type __old_size = _Base::bucket_count();
196 iterator __res = _Base::insert(__iter, __v);
197 _M_profile_resize(__old_size);
202 insert(value_type&& __obj)
204 size_type __old_size = _Base::bucket_count();
206 _M_profile_resize(__old_size);
211 insert(const_iterator __iter, value_type&& __v)
213 size_type __old_size = _Base::bucket_count();
214 iterator __res = _Base::insert(__iter, std::move(__v));
215 _M_profile_resize(__old_size);
219 template<
typename _InputIter>
221 insert(_InputIter __first, _InputIter __last)
223 size_type __old_size = _Base::bucket_count();
224 _Base::insert(__first, __last);
225 _M_profile_resize(__old_size);
229 rehash(size_type __n)
231 size_type __old_size = _Base::bucket_count();
233 _M_profile_resize(__old_size);
238 _M_profile_resize(size_type __old_size)
240 size_type __new_size = _Base::bucket_count();
241 if (__old_size != __new_size)
242 __profcxx_hashtable_resize(
this, __old_size, __new_size);
246 template<
typename _Key,
typename _Hash,
typename _Pred,
typename _Alloc>
252 template<
typename _Key,
typename _Hash,
typename _Pred,
typename _Alloc>
256 {
return static_cast<const _GLIBCXX_STD_BASE&
>(__x) == __y; }
258 template<
typename _Key,
typename _Hash,
typename _Pred,
typename _Alloc>
260 operator!=(
const unordered_set<_Key, _Hash, _Pred, _Alloc>& __x,
261 const unordered_set<_Key, _Hash, _Pred, _Alloc>& __y)
262 {
return !(__x == __y); }
265 #undef _GLIBCXX_STD_BASE
266 #define _GLIBCXX_STD_BASE _GLIBCXX_STD_C::_GLIBCXX_BASE
267 #define _GLIBCXX_BASE unordered_multiset<_Value, _Hash, _Pred, _Alloc>
270 template<
typename _Value,
275 :
public _GLIBCXX_STD_BASE,
276 public _Unordered_profile<unordered_multiset<_Value,
277 _Hash, _Pred, _Alloc>,
280 typedef _GLIBCXX_STD_BASE
_Base;
283 _M_base() noexcept {
return *
this; }
286 _M_base()
const noexcept {
return *
this; }
289 typedef typename _Base::size_type size_type;
290 typedef typename _Base::hasher hasher;
291 typedef typename _Base::key_equal key_equal;
292 typedef typename _Base::allocator_type allocator_type;
293 typedef typename _Base::key_type key_type;
294 typedef typename _Base::value_type value_type;
295 typedef typename _Base::difference_type difference_type;
296 typedef typename _Base::reference reference;
297 typedef typename _Base::const_reference const_reference;
299 typedef typename _Base::iterator iterator;
300 typedef typename _Base::const_iterator const_iterator;
304 const hasher& __hf = hasher(),
305 const key_equal& __eql = key_equal(),
306 const allocator_type& __a = allocator_type())
307 :
_Base(__n, __hf, __eql, __a)
310 template<
typename _InputIterator>
313 const hasher& __hf = hasher(),
314 const key_equal& __eql = key_equal(),
315 const allocator_type& __a = allocator_type())
316 :
_Base(__f, __l, __n, __hf, __eql, __a)
333 const allocator_type& __a)
334 :
_Base(__umset._M_base(), __a)
338 const allocator_type& __a)
339 :
_Base(std::move(__umset._M_base()), __a)
344 const hasher& __hf = hasher(),
345 const key_equal& __eql = key_equal(),
346 const allocator_type& __a = allocator_type())
347 :
_Base(__l, __n, __hf, __eql, __a)
365 noexcept( noexcept(__x._M_base().swap(__x)) )
366 { _Base::swap(__x); }
371 __profcxx_hashtable_destruct(
this, _Base::bucket_count(),
373 this->_M_profile_destruct();
377 template<
typename... _Args>
379 emplace(_Args&&... __args)
381 size_type __old_size = _Base::bucket_count();
382 iterator __res = _Base::emplace(std::forward<_Args>(__args)...);
383 _M_profile_resize(__old_size);
387 template<
typename... _Args>
389 emplace_hint(const_iterator __it, _Args&&... __args)
391 size_type __old_size = _Base::bucket_count();
393 = _Base::emplace_hint(__it, std::forward<_Args>(__args)...);
394 _M_profile_resize(__old_size);
401 size_type __old_size = _Base::bucket_count();
403 _M_profile_resize(__old_size);
407 insert(
const value_type& __obj)
409 size_type __old_size = _Base::bucket_count();
410 iterator __res = _Base::insert(__obj);
411 _M_profile_resize(__old_size);
416 insert(const_iterator __iter,
const value_type& __v)
418 size_type __old_size = _Base::bucket_count();
419 iterator __res = _Base::insert(__iter, __v);
420 _M_profile_resize(__old_size);
425 insert(value_type&& __obj)
427 size_type __old_size = _Base::bucket_count();
428 iterator __res = _Base::insert(std::move(__obj));
429 _M_profile_resize(__old_size);
434 insert(const_iterator __iter, value_type&& __v)
436 size_type __old_size = _Base::bucket_count();
437 iterator __res = _Base::insert(__iter, std::move(__v));
438 _M_profile_resize(__old_size);
442 template<
typename _InputIter>
444 insert(_InputIter __first, _InputIter __last)
446 size_type __old_size = _Base::bucket_count();
447 _Base::insert(__first, __last);
448 _M_profile_resize(__old_size);
452 rehash(size_type __n)
454 size_type __old_size = _Base::bucket_count();
456 _M_profile_resize(__old_size);
461 _M_profile_resize(size_type __old_size)
463 size_type __new_size = _Base::bucket_count();
464 if (__old_size != __new_size)
465 __profcxx_hashtable_resize(
this, __old_size, __new_size);
469 template<
typename _Value,
typename _Hash,
typename _Pred,
typename _Alloc>
475 template<
typename _Value,
typename _Hash,
typename _Pred,
typename _Alloc>
479 {
return static_cast<const _GLIBCXX_STD_BASE&
>(__x) == __y; }
481 template<
typename _Value,
typename _Hash,
typename _Pred,
typename _Alloc>
483 operator!=(
const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
484 const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y)
485 {
return !(__x == __y); }
491 #undef _GLIBCXX_STD_BASE
Unordered_set wrapper with performance instrumentation.
constexpr size_t size() const noexcept
Returns the total number of bits.
Unordered_multiset wrapper with performance instrumentation.
One of the comparison functors.
A standard container composed of unique keys (containing at most one of each key value) in which the ...
Primary class template hash.
Struct holding two objects of arbitrary type.
The standard allocator, as per [20.4].
A standard container composed of equivalent keys (possibly containing multiple of each key value) in ...
Sequential helper functions. This file is a GNU profile extension to the Standard C++ Library...