| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 1 | // -*- C++ -*- | 
|  | 2 | //===-------------------------- unordered_set -----------------------------===// | 
|  | 3 | // | 
| Howard Hinnant | f5256e1 | 2010-05-11 21:36:01 +0000 | [diff] [blame] | 4 | //                     The LLVM Compiler Infrastructure | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 5 | // | 
| Howard Hinnant | b64f8b0 | 2010-11-16 22:09:02 +0000 | [diff] [blame] | 6 | // This file is dual licensed under the MIT and the University of Illinois Open | 
|  | 7 | // Source Licenses. See LICENSE.TXT for details. | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 8 | // | 
|  | 9 | //===----------------------------------------------------------------------===// | 
|  | 10 |  | 
|  | 11 | #ifndef _LIBCPP_UNORDERED_SET | 
|  | 12 | #define _LIBCPP_UNORDERED_SET | 
|  | 13 |  | 
|  | 14 | /* | 
|  | 15 |  | 
|  | 16 | unordered_set synopsis | 
|  | 17 |  | 
|  | 18 | #include <initializer_list> | 
|  | 19 |  | 
|  | 20 | namespace std | 
|  | 21 | { | 
|  | 22 |  | 
|  | 23 | template <class Value, class Hash = hash<Value>, class Pred = equal_to<Value>, | 
|  | 24 | class Alloc = allocator<Value>> | 
|  | 25 | class unordered_set | 
|  | 26 | { | 
|  | 27 | public: | 
|  | 28 | // types | 
|  | 29 | typedef Value                                                      key_type; | 
|  | 30 | typedef key_type                                                   value_type; | 
|  | 31 | typedef Hash                                                       hasher; | 
|  | 32 | typedef Pred                                                       key_equal; | 
|  | 33 | typedef Alloc                                                      allocator_type; | 
|  | 34 | typedef value_type&                                                reference; | 
|  | 35 | typedef const value_type&                                          const_reference; | 
|  | 36 | typedef typename allocator_traits<allocator_type>::pointer         pointer; | 
|  | 37 | typedef typename allocator_traits<allocator_type>::const_pointer   const_pointer; | 
|  | 38 | typedef typename allocator_traits<allocator_type>::size_type       size_type; | 
|  | 39 | typedef typename allocator_traits<allocator_type>::difference_type difference_type; | 
|  | 40 |  | 
|  | 41 | typedef /unspecified/ iterator; | 
|  | 42 | typedef /unspecified/ const_iterator; | 
|  | 43 | typedef /unspecified/ local_iterator; | 
|  | 44 | typedef /unspecified/ const_local_iterator; | 
|  | 45 |  | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 46 | unordered_set() | 
|  | 47 | noexcept( | 
|  | 48 | is_nothrow_default_constructible<hasher>::value && | 
|  | 49 | is_nothrow_default_constructible<key_equal>::value && | 
|  | 50 | is_nothrow_default_constructible<allocator_type>::value); | 
|  | 51 | explicit unordered_set(size_type n, const hasher& hf = hasher(), | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 52 | const key_equal& eql = key_equal(), | 
|  | 53 | const allocator_type& a = allocator_type()); | 
|  | 54 | template <class InputIterator> | 
|  | 55 | unordered_set(InputIterator f, InputIterator l, | 
|  | 56 | size_type n = 0, const hasher& hf = hasher(), | 
|  | 57 | const key_equal& eql = key_equal(), | 
|  | 58 | const allocator_type& a = allocator_type()); | 
|  | 59 | explicit unordered_set(const allocator_type&); | 
|  | 60 | unordered_set(const unordered_set&); | 
|  | 61 | unordered_set(const unordered_set&, const Allocator&); | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 62 | unordered_set(unordered_set&&) | 
|  | 63 | noexcept( | 
|  | 64 | is_nothrow_move_constructible<hasher>::value && | 
|  | 65 | is_nothrow_move_constructible<key_equal>::value && | 
|  | 66 | is_nothrow_move_constructible<allocator_type>::value); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 67 | unordered_set(unordered_set&&, const Allocator&); | 
|  | 68 | unordered_set(initializer_list<value_type>, size_type n = 0, | 
|  | 69 | const hasher& hf = hasher(), const key_equal& eql = key_equal(), | 
|  | 70 | const allocator_type& a = allocator_type()); | 
|  | 71 | ~unordered_set(); | 
|  | 72 | unordered_set& operator=(const unordered_set&); | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 73 | unordered_set& operator=(unordered_set&&) | 
|  | 74 | noexcept( | 
|  | 75 | allocator_type::propagate_on_container_move_assignment::value && | 
|  | 76 | is_nothrow_move_assignable<allocator_type>::value && | 
|  | 77 | is_nothrow_move_assignable<hasher>::value && | 
|  | 78 | is_nothrow_move_assignable<key_equal>::value); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 79 | unordered_set& operator=(initializer_list<value_type>); | 
|  | 80 |  | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 81 | allocator_type get_allocator() const noexcept; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 82 |  | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 83 | bool      empty() const noexcept; | 
|  | 84 | size_type size() const noexcept; | 
|  | 85 | size_type max_size() const noexcept; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 86 |  | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 87 | iterator       begin() noexcept; | 
|  | 88 | iterator       end() noexcept; | 
|  | 89 | const_iterator begin()  const noexcept; | 
|  | 90 | const_iterator end()    const noexcept; | 
|  | 91 | const_iterator cbegin() const noexcept; | 
|  | 92 | const_iterator cend()   const noexcept; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 93 |  | 
|  | 94 | template <class... Args> | 
|  | 95 | pair<iterator, bool> emplace(Args&&... args); | 
|  | 96 | template <class... Args> | 
|  | 97 | iterator emplace_hint(const_iterator position, Args&&... args); | 
|  | 98 | pair<iterator, bool> insert(const value_type& obj); | 
|  | 99 | pair<iterator, bool> insert(value_type&& obj); | 
|  | 100 | iterator insert(const_iterator hint, const value_type& obj); | 
|  | 101 | iterator insert(const_iterator hint, value_type&& obj); | 
|  | 102 | template <class InputIterator> | 
|  | 103 | void insert(InputIterator first, InputIterator last); | 
|  | 104 | void insert(initializer_list<value_type>); | 
|  | 105 |  | 
|  | 106 | iterator erase(const_iterator position); | 
|  | 107 | size_type erase(const key_type& k); | 
|  | 108 | iterator erase(const_iterator first, const_iterator last); | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 109 | void clear() noexcept; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 110 |  | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 111 | void swap(unordered_set&) | 
|  | 112 | noexcept( | 
|  | 113 | (!allocator_type::propagate_on_container_swap::value || | 
|  | 114 | __is_nothrow_swappable<allocator_type>::value) && | 
|  | 115 | __is_nothrow_swappable<hasher>::value && | 
|  | 116 | __is_nothrow_swappable<key_equal>::value); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 117 |  | 
|  | 118 | hasher hash_function() const; | 
|  | 119 | key_equal key_eq() const; | 
|  | 120 |  | 
|  | 121 | iterator       find(const key_type& k); | 
|  | 122 | const_iterator find(const key_type& k) const; | 
|  | 123 | size_type count(const key_type& k) const; | 
|  | 124 | pair<iterator, iterator>             equal_range(const key_type& k); | 
|  | 125 | pair<const_iterator, const_iterator> equal_range(const key_type& k) const; | 
|  | 126 |  | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 127 | size_type bucket_count() const noexcept; | 
|  | 128 | size_type max_bucket_count() const noexcept; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 129 |  | 
|  | 130 | size_type bucket_size(size_type n) const; | 
|  | 131 | size_type bucket(const key_type& k) const; | 
|  | 132 |  | 
|  | 133 | local_iterator       begin(size_type n); | 
|  | 134 | local_iterator       end(size_type n); | 
|  | 135 | const_local_iterator begin(size_type n) const; | 
|  | 136 | const_local_iterator end(size_type n) const; | 
|  | 137 | const_local_iterator cbegin(size_type n) const; | 
|  | 138 | const_local_iterator cend(size_type n) const; | 
|  | 139 |  | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 140 | float load_factor() const noexcept; | 
|  | 141 | float max_load_factor() const noexcept; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 142 | void max_load_factor(float z); | 
|  | 143 | void rehash(size_type n); | 
|  | 144 | void reserve(size_type n); | 
|  | 145 | }; | 
|  | 146 |  | 
|  | 147 | template <class Value, class Hash, class Pred, class Alloc> | 
|  | 148 | void swap(unordered_set<Value, Hash, Pred, Alloc>& x, | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 149 | unordered_set<Value, Hash, Pred, Alloc>& y) | 
|  | 150 | noexcept(noexcept(x.swap(y))); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 151 |  | 
|  | 152 | template <class Value, class Hash, class Pred, class Alloc> | 
|  | 153 | bool | 
|  | 154 | operator==(const unordered_set<Value, Hash, Pred, Alloc>& x, | 
|  | 155 | const unordered_set<Value, Hash, Pred, Alloc>& y); | 
|  | 156 |  | 
|  | 157 | template <class Value, class Hash, class Pred, class Alloc> | 
|  | 158 | bool | 
|  | 159 | operator!=(const unordered_set<Value, Hash, Pred, Alloc>& x, | 
|  | 160 | const unordered_set<Value, Hash, Pred, Alloc>& y); | 
|  | 161 |  | 
|  | 162 | template <class Value, class Hash = hash<Value>, class Pred = equal_to<Value>, | 
|  | 163 | class Alloc = allocator<Value>> | 
|  | 164 | class unordered_multiset | 
|  | 165 | { | 
|  | 166 | public: | 
|  | 167 | // types | 
|  | 168 | typedef Value                                                      key_type; | 
|  | 169 | typedef key_type                                                   value_type; | 
|  | 170 | typedef Hash                                                       hasher; | 
|  | 171 | typedef Pred                                                       key_equal; | 
|  | 172 | typedef Alloc                                                      allocator_type; | 
|  | 173 | typedef value_type&                                                reference; | 
|  | 174 | typedef const value_type&                                          const_reference; | 
|  | 175 | typedef typename allocator_traits<allocator_type>::pointer         pointer; | 
|  | 176 | typedef typename allocator_traits<allocator_type>::const_pointer   const_pointer; | 
|  | 177 | typedef typename allocator_traits<allocator_type>::size_type       size_type; | 
|  | 178 | typedef typename allocator_traits<allocator_type>::difference_type difference_type; | 
|  | 179 |  | 
|  | 180 | typedef /unspecified/ iterator; | 
|  | 181 | typedef /unspecified/ const_iterator; | 
|  | 182 | typedef /unspecified/ local_iterator; | 
|  | 183 | typedef /unspecified/ const_local_iterator; | 
|  | 184 |  | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 185 | unordered_multiset() | 
|  | 186 | noexcept( | 
|  | 187 | is_nothrow_default_constructible<hasher>::value && | 
|  | 188 | is_nothrow_default_constructible<key_equal>::value && | 
|  | 189 | is_nothrow_default_constructible<allocator_type>::value); | 
|  | 190 | explicit unordered_multiset(size_type n, const hasher& hf = hasher(), | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 191 | const key_equal& eql = key_equal(), | 
|  | 192 | const allocator_type& a = allocator_type()); | 
|  | 193 | template <class InputIterator> | 
|  | 194 | unordered_multiset(InputIterator f, InputIterator l, | 
|  | 195 | size_type n = 0, const hasher& hf = hasher(), | 
|  | 196 | const key_equal& eql = key_equal(), | 
|  | 197 | const allocator_type& a = allocator_type()); | 
|  | 198 | explicit unordered_multiset(const allocator_type&); | 
|  | 199 | unordered_multiset(const unordered_multiset&); | 
|  | 200 | unordered_multiset(const unordered_multiset&, const Allocator&); | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 201 | unordered_multiset(unordered_multiset&&) | 
|  | 202 | noexcept( | 
|  | 203 | is_nothrow_move_constructible<hasher>::value && | 
|  | 204 | is_nothrow_move_constructible<key_equal>::value && | 
|  | 205 | is_nothrow_move_constructible<allocator_type>::value); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 206 | unordered_multiset(unordered_multiset&&, const Allocator&); | 
|  | 207 | unordered_multiset(initializer_list<value_type>, size_type n = /see below/, | 
|  | 208 | const hasher& hf = hasher(), const key_equal& eql = key_equal(), | 
|  | 209 | const allocator_type& a = allocator_type()); | 
|  | 210 | ~unordered_multiset(); | 
|  | 211 | unordered_multiset& operator=(const unordered_multiset&); | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 212 | unordered_multiset& operator=(unordered_multiset&&) | 
|  | 213 | noexcept( | 
|  | 214 | allocator_type::propagate_on_container_move_assignment::value && | 
|  | 215 | is_nothrow_move_assignable<allocator_type>::value && | 
|  | 216 | is_nothrow_move_assignable<hasher>::value && | 
|  | 217 | is_nothrow_move_assignable<key_equal>::value); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 218 | unordered_multiset& operator=(initializer_list<value_type>); | 
|  | 219 |  | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 220 | allocator_type get_allocator() const noexcept; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 221 |  | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 222 | bool      empty() const noexcept; | 
|  | 223 | size_type size() const noexcept; | 
|  | 224 | size_type max_size() const noexcept; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 225 |  | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 226 | iterator       begin() noexcept; | 
|  | 227 | iterator       end() noexcept; | 
|  | 228 | const_iterator begin()  const noexcept; | 
|  | 229 | const_iterator end()    const noexcept; | 
|  | 230 | const_iterator cbegin() const noexcept; | 
|  | 231 | const_iterator cend()   const noexcept; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 232 |  | 
|  | 233 | template <class... Args> | 
|  | 234 | iterator emplace(Args&&... args); | 
|  | 235 | template <class... Args> | 
|  | 236 | iterator emplace_hint(const_iterator position, Args&&... args); | 
|  | 237 | iterator insert(const value_type& obj); | 
|  | 238 | iterator insert(value_type&& obj); | 
|  | 239 | iterator insert(const_iterator hint, const value_type& obj); | 
|  | 240 | iterator insert(const_iterator hint, value_type&& obj); | 
|  | 241 | template <class InputIterator> | 
|  | 242 | void insert(InputIterator first, InputIterator last); | 
|  | 243 | void insert(initializer_list<value_type>); | 
|  | 244 |  | 
|  | 245 | iterator erase(const_iterator position); | 
|  | 246 | size_type erase(const key_type& k); | 
|  | 247 | iterator erase(const_iterator first, const_iterator last); | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 248 | void clear() noexcept; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 249 |  | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 250 | void swap(unordered_multiset&) | 
|  | 251 | noexcept( | 
|  | 252 | (!allocator_type::propagate_on_container_swap::value || | 
|  | 253 | __is_nothrow_swappable<allocator_type>::value) && | 
|  | 254 | __is_nothrow_swappable<hasher>::value && | 
|  | 255 | __is_nothrow_swappable<key_equal>::value); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 256 |  | 
|  | 257 | hasher hash_function() const; | 
|  | 258 | key_equal key_eq() const; | 
|  | 259 |  | 
|  | 260 | iterator       find(const key_type& k); | 
|  | 261 | const_iterator find(const key_type& k) const; | 
|  | 262 | size_type count(const key_type& k) const; | 
|  | 263 | pair<iterator, iterator>             equal_range(const key_type& k); | 
|  | 264 | pair<const_iterator, const_iterator> equal_range(const key_type& k) const; | 
|  | 265 |  | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 266 | size_type bucket_count() const noexcept; | 
|  | 267 | size_type max_bucket_count() const noexcept; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 268 |  | 
|  | 269 | size_type bucket_size(size_type n) const; | 
|  | 270 | size_type bucket(const key_type& k) const; | 
|  | 271 |  | 
|  | 272 | local_iterator       begin(size_type n); | 
|  | 273 | local_iterator       end(size_type n); | 
|  | 274 | const_local_iterator begin(size_type n) const; | 
|  | 275 | const_local_iterator end(size_type n) const; | 
|  | 276 | const_local_iterator cbegin(size_type n) const; | 
|  | 277 | const_local_iterator cend(size_type n) const; | 
|  | 278 |  | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 279 | float load_factor() const noexcept; | 
|  | 280 | float max_load_factor() const noexcept; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 281 | void max_load_factor(float z); | 
|  | 282 | void rehash(size_type n); | 
|  | 283 | void reserve(size_type n); | 
|  | 284 | }; | 
|  | 285 |  | 
|  | 286 | template <class Value, class Hash, class Pred, class Alloc> | 
|  | 287 | void swap(unordered_multiset<Value, Hash, Pred, Alloc>& x, | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 288 | unordered_multiset<Value, Hash, Pred, Alloc>& y) | 
|  | 289 | noexcept(noexcept(x.swap(y))); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 290 |  | 
|  | 291 | template <class Value, class Hash, class Pred, class Alloc> | 
|  | 292 | bool | 
|  | 293 | operator==(const unordered_multiset<Value, Hash, Pred, Alloc>& x, | 
|  | 294 | const unordered_multiset<Value, Hash, Pred, Alloc>& y); | 
|  | 295 |  | 
|  | 296 | template <class Value, class Hash, class Pred, class Alloc> | 
|  | 297 | bool | 
|  | 298 | operator!=(const unordered_multiset<Value, Hash, Pred, Alloc>& x, | 
|  | 299 | const unordered_multiset<Value, Hash, Pred, Alloc>& y); | 
|  | 300 | }  // std | 
|  | 301 |  | 
|  | 302 | */ | 
|  | 303 |  | 
|  | 304 | #include <__config> | 
|  | 305 | #include <__hash_table> | 
|  | 306 | #include <functional> | 
|  | 307 |  | 
|  | 308 | #pragma GCC system_header | 
|  | 309 |  | 
|  | 310 | _LIBCPP_BEGIN_NAMESPACE_STD | 
|  | 311 |  | 
|  | 312 | template <class _Value, class _Hash = hash<_Value>, class _Pred = equal_to<_Value>, | 
|  | 313 | class _Alloc = allocator<_Value> > | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 314 | class _LIBCPP_VISIBLE unordered_set | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 315 | { | 
|  | 316 | public: | 
|  | 317 | // types | 
|  | 318 | typedef _Value                                                     key_type; | 
|  | 319 | typedef key_type                                                   value_type; | 
|  | 320 | typedef _Hash                                                      hasher; | 
|  | 321 | typedef _Pred                                                      key_equal; | 
|  | 322 | typedef _Alloc                                                     allocator_type; | 
|  | 323 | typedef value_type&                                                reference; | 
|  | 324 | typedef const value_type&                                          const_reference; | 
|  | 325 |  | 
|  | 326 | private: | 
|  | 327 | typedef __hash_table<value_type, hasher, key_equal, allocator_type> __table; | 
|  | 328 |  | 
|  | 329 | __table __table_; | 
|  | 330 |  | 
|  | 331 | public: | 
|  | 332 | typedef typename __table::pointer         pointer; | 
|  | 333 | typedef typename __table::const_pointer   const_pointer; | 
|  | 334 | typedef typename __table::size_type       size_type; | 
|  | 335 | typedef typename __table::difference_type difference_type; | 
|  | 336 |  | 
|  | 337 | typedef typename __table::const_iterator       iterator; | 
|  | 338 | typedef typename __table::const_iterator       const_iterator; | 
|  | 339 | typedef typename __table::const_local_iterator local_iterator; | 
|  | 340 | typedef typename __table::const_local_iterator const_local_iterator; | 
|  | 341 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 342 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 343 | unordered_set() | 
|  | 344 | _NOEXCEPT_(is_nothrow_default_constructible<__table>::value) | 
|  | 345 | {} // = default; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 346 | explicit unordered_set(size_type __n, const hasher& __hf = hasher(), | 
|  | 347 | const key_equal& __eql = key_equal()); | 
|  | 348 | unordered_set(size_type __n, const hasher& __hf, const key_equal& __eql, | 
|  | 349 | const allocator_type& __a); | 
|  | 350 | template <class _InputIterator> | 
|  | 351 | unordered_set(_InputIterator __first, _InputIterator __last); | 
|  | 352 | template <class _InputIterator> | 
|  | 353 | unordered_set(_InputIterator __first, _InputIterator __last, | 
|  | 354 | size_type __n, const hasher& __hf = hasher(), | 
|  | 355 | const key_equal& __eql = key_equal()); | 
|  | 356 | template <class _InputIterator> | 
|  | 357 | unordered_set(_InputIterator __first, _InputIterator __last, | 
|  | 358 | size_type __n, const hasher& __hf, const key_equal& __eql, | 
|  | 359 | const allocator_type& __a); | 
|  | 360 | explicit unordered_set(const allocator_type& __a); | 
|  | 361 | unordered_set(const unordered_set& __u); | 
|  | 362 | unordered_set(const unordered_set& __u, const allocator_type& __a); | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 363 | #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 364 | unordered_set(unordered_set&& __u) | 
|  | 365 | _NOEXCEPT_(is_nothrow_move_constructible<__table>::value); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 366 | unordered_set(unordered_set&& __u, const allocator_type& __a); | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 367 | #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 368 | unordered_set(initializer_list<value_type> __il); | 
|  | 369 | unordered_set(initializer_list<value_type> __il, size_type __n, | 
|  | 370 | const hasher& __hf = hasher(), | 
|  | 371 | const key_equal& __eql = key_equal()); | 
|  | 372 | unordered_set(initializer_list<value_type> __il, size_type __n, | 
|  | 373 | const hasher& __hf, const key_equal& __eql, | 
|  | 374 | const allocator_type& __a); | 
|  | 375 | // ~unordered_set() = default; | 
| Howard Hinnant | 61aa601 | 2011-07-01 19:24:36 +0000 | [diff] [blame^] | 376 | _LIBCPP_INLINE_VISIBILITY | 
|  | 377 | unordered_set& operator=(const unordered_set& __u) | 
|  | 378 | { | 
|  | 379 | __table_ = __u.__table_; | 
|  | 380 | return *this; | 
|  | 381 | } | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 382 | #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 383 | unordered_set& operator=(unordered_set&& __u) | 
|  | 384 | _NOEXCEPT_(is_nothrow_move_assignable<__table>::value); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 385 | #endif | 
|  | 386 | unordered_set& operator=(initializer_list<value_type> __il); | 
|  | 387 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 388 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 389 | allocator_type get_allocator() const _NOEXCEPT | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 390 | {return allocator_type(__table_.__node_alloc());} | 
|  | 391 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 392 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 393 | bool      empty() const _NOEXCEPT {return __table_.size() == 0;} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 394 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 395 | size_type size() const _NOEXCEPT  {return __table_.size();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 396 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 397 | size_type max_size() const _NOEXCEPT {return __table_.max_size();} | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 398 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 399 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 400 | iterator       begin() _NOEXCEPT        {return __table_.begin();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 401 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 402 | iterator       end() _NOEXCEPT          {return __table_.end();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 403 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 404 | const_iterator begin()  const _NOEXCEPT {return __table_.begin();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 405 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 406 | const_iterator end()    const _NOEXCEPT {return __table_.end();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 407 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 408 | const_iterator cbegin() const _NOEXCEPT {return __table_.begin();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 409 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 410 | const_iterator cend()   const _NOEXCEPT {return __table_.end();} | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 411 |  | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 412 | #if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS) | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 413 | template <class... _Args> | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 414 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 415 | pair<iterator, bool> emplace(_Args&&... __args) | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 +0000 | [diff] [blame] | 416 | {return __table_.__emplace_unique(_VSTD::forward<_Args>(__args)...);} | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 417 | template <class... _Args> | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 418 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 419 | iterator emplace_hint(const_iterator, _Args&&... __args) | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 +0000 | [diff] [blame] | 420 | {return __table_.__emplace_unique(_VSTD::forward<_Args>(__args)...).first;} | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 421 | #endif  // !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS) | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 422 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 423 | pair<iterator, bool> insert(const value_type& __x) | 
|  | 424 | {return __table_.__insert_unique(__x);} | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 425 | #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 426 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 427 | pair<iterator, bool> insert(value_type&& __x) | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 +0000 | [diff] [blame] | 428 | {return __table_.__insert_unique(_VSTD::move(__x));} | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 429 | #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 430 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 431 | iterator insert(const_iterator, const value_type& __x) | 
|  | 432 | {return insert(__x).first;} | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 433 | #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 434 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 435 | iterator insert(const_iterator, value_type&& __x) | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 +0000 | [diff] [blame] | 436 | {return insert(_VSTD::move(__x)).first;} | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 437 | #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 438 | template <class _InputIterator> | 
|  | 439 | void insert(_InputIterator __first, _InputIterator __last); | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 440 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 441 | void insert(initializer_list<value_type> __il) | 
|  | 442 | {insert(__il.begin(), __il.end());} | 
|  | 443 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 444 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 445 | iterator erase(const_iterator __p) {return __table_.erase(__p);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 446 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 447 | size_type erase(const key_type& __k) {return __table_.__erase_unique(__k);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 448 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 449 | iterator erase(const_iterator __first, const_iterator __last) | 
|  | 450 | {return __table_.erase(__first, __last);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 451 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 452 | void clear() _NOEXCEPT {__table_.clear();} | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 453 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 454 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 455 | void swap(unordered_set& __u) | 
|  | 456 | _NOEXCEPT_(__is_nothrow_swappable<__table>::value) | 
|  | 457 | {__table_.swap(__u.__table_);} | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 458 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 459 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 460 | hasher hash_function() const {return __table_.hash_function();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 461 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 462 | key_equal key_eq() const {return __table_.key_eq();} | 
|  | 463 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 464 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 465 | iterator       find(const key_type& __k)       {return __table_.find(__k);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 466 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 467 | const_iterator find(const key_type& __k) const {return __table_.find(__k);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 468 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 469 | size_type count(const key_type& __k) const {return __table_.__count_unique(__k);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 470 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 471 | pair<iterator, iterator>             equal_range(const key_type& __k) | 
|  | 472 | {return __table_.__equal_range_unique(__k);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 473 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 474 | pair<const_iterator, const_iterator> equal_range(const key_type& __k) const | 
|  | 475 | {return __table_.__equal_range_unique(__k);} | 
|  | 476 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 477 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 478 | size_type bucket_count() const _NOEXCEPT {return __table_.bucket_count();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 479 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 480 | size_type max_bucket_count() const _NOEXCEPT {return __table_.max_bucket_count();} | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 481 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 482 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 483 | size_type bucket_size(size_type __n) const {return __table_.bucket_size(__n);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 484 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 485 | size_type bucket(const key_type& __k) const {return __table_.bucket(__k);} | 
|  | 486 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 487 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 488 | local_iterator       begin(size_type __n)        {return __table_.begin(__n);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 489 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 490 | local_iterator       end(size_type __n)          {return __table_.end(__n);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 491 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 492 | const_local_iterator begin(size_type __n) const  {return __table_.cbegin(__n);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 493 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 494 | const_local_iterator end(size_type __n) const    {return __table_.cend(__n);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 495 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 496 | const_local_iterator cbegin(size_type __n) const {return __table_.cbegin(__n);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 497 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 498 | const_local_iterator cend(size_type __n) const   {return __table_.cend(__n);} | 
|  | 499 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 500 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 501 | float load_factor() const _NOEXCEPT {return __table_.load_factor();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 502 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 503 | float max_load_factor() const _NOEXCEPT {return __table_.max_load_factor();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 504 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 505 | void max_load_factor(float __mlf) {__table_.max_load_factor(__mlf);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 506 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 507 | void rehash(size_type __n) {__table_.rehash(__n);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 508 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 509 | void reserve(size_type __n) {__table_.reserve(__n);} | 
|  | 510 | }; | 
|  | 511 |  | 
|  | 512 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 513 | unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(size_type __n, | 
|  | 514 | const hasher& __hf, const key_equal& __eql) | 
|  | 515 | : __table_(__hf, __eql) | 
|  | 516 | { | 
|  | 517 | __table_.rehash(__n); | 
|  | 518 | } | 
|  | 519 |  | 
|  | 520 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 521 | unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(size_type __n, | 
|  | 522 | const hasher& __hf, const key_equal& __eql, const allocator_type& __a) | 
|  | 523 | : __table_(__hf, __eql, __a) | 
|  | 524 | { | 
|  | 525 | __table_.rehash(__n); | 
|  | 526 | } | 
|  | 527 |  | 
|  | 528 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 529 | template <class _InputIterator> | 
|  | 530 | unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set( | 
|  | 531 | _InputIterator __first, _InputIterator __last) | 
|  | 532 | { | 
|  | 533 | insert(__first, __last); | 
|  | 534 | } | 
|  | 535 |  | 
|  | 536 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 537 | template <class _InputIterator> | 
|  | 538 | unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set( | 
|  | 539 | _InputIterator __first, _InputIterator __last, size_type __n, | 
|  | 540 | const hasher& __hf, const key_equal& __eql) | 
|  | 541 | : __table_(__hf, __eql) | 
|  | 542 | { | 
|  | 543 | __table_.rehash(__n); | 
|  | 544 | insert(__first, __last); | 
|  | 545 | } | 
|  | 546 |  | 
|  | 547 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 548 | template <class _InputIterator> | 
|  | 549 | unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set( | 
|  | 550 | _InputIterator __first, _InputIterator __last, size_type __n, | 
|  | 551 | const hasher& __hf, const key_equal& __eql, const allocator_type& __a) | 
|  | 552 | : __table_(__hf, __eql, __a) | 
|  | 553 | { | 
|  | 554 | __table_.rehash(__n); | 
|  | 555 | insert(__first, __last); | 
|  | 556 | } | 
|  | 557 |  | 
|  | 558 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 559 | inline _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 560 | unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set( | 
|  | 561 | const allocator_type& __a) | 
|  | 562 | : __table_(__a) | 
|  | 563 | { | 
|  | 564 | } | 
|  | 565 |  | 
|  | 566 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 567 | unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set( | 
|  | 568 | const unordered_set& __u) | 
|  | 569 | : __table_(__u.__table_) | 
|  | 570 | { | 
|  | 571 | __table_.rehash(__u.bucket_count()); | 
|  | 572 | insert(__u.begin(), __u.end()); | 
|  | 573 | } | 
|  | 574 |  | 
|  | 575 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 576 | unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set( | 
|  | 577 | const unordered_set& __u, const allocator_type& __a) | 
|  | 578 | : __table_(__u.__table_, __a) | 
|  | 579 | { | 
|  | 580 | __table_.rehash(__u.bucket_count()); | 
|  | 581 | insert(__u.begin(), __u.end()); | 
|  | 582 | } | 
|  | 583 |  | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 584 | #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 585 |  | 
|  | 586 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 587 | inline _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 588 | unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set( | 
|  | 589 | unordered_set&& __u) | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 590 | _NOEXCEPT_(is_nothrow_move_constructible<__table>::value) | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 +0000 | [diff] [blame] | 591 | : __table_(_VSTD::move(__u.__table_)) | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 592 | { | 
|  | 593 | } | 
|  | 594 |  | 
|  | 595 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 596 | unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set( | 
|  | 597 | unordered_set&& __u, const allocator_type& __a) | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 +0000 | [diff] [blame] | 598 | : __table_(_VSTD::move(__u.__table_), __a) | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 599 | { | 
|  | 600 | if (__a != __u.get_allocator()) | 
|  | 601 | { | 
|  | 602 | iterator __i = __u.begin(); | 
|  | 603 | while (__u.size() != 0) | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 +0000 | [diff] [blame] | 604 | __table_.__insert_unique(_VSTD::move(__u.__table_.remove(__i++)->__value_)); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 605 | } | 
|  | 606 | } | 
|  | 607 |  | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 608 | #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 609 |  | 
|  | 610 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 611 | unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set( | 
|  | 612 | initializer_list<value_type> __il) | 
|  | 613 | { | 
|  | 614 | insert(__il.begin(), __il.end()); | 
|  | 615 | } | 
|  | 616 |  | 
|  | 617 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 618 | unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set( | 
|  | 619 | initializer_list<value_type> __il, size_type __n, const hasher& __hf, | 
|  | 620 | const key_equal& __eql) | 
|  | 621 | : __table_(__hf, __eql) | 
|  | 622 | { | 
|  | 623 | __table_.rehash(__n); | 
|  | 624 | insert(__il.begin(), __il.end()); | 
|  | 625 | } | 
|  | 626 |  | 
|  | 627 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 628 | unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set( | 
|  | 629 | initializer_list<value_type> __il, size_type __n, const hasher& __hf, | 
|  | 630 | const key_equal& __eql, const allocator_type& __a) | 
|  | 631 | : __table_(__hf, __eql, __a) | 
|  | 632 | { | 
|  | 633 | __table_.rehash(__n); | 
|  | 634 | insert(__il.begin(), __il.end()); | 
|  | 635 | } | 
|  | 636 |  | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 637 | #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 638 |  | 
|  | 639 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 640 | inline _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 641 | unordered_set<_Value, _Hash, _Pred, _Alloc>& | 
|  | 642 | unordered_set<_Value, _Hash, _Pred, _Alloc>::operator=(unordered_set&& __u) | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 643 | _NOEXCEPT_(is_nothrow_move_assignable<__table>::value) | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 644 | { | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 +0000 | [diff] [blame] | 645 | __table_ = _VSTD::move(__u.__table_); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 646 | return *this; | 
|  | 647 | } | 
|  | 648 |  | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 649 | #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 650 |  | 
|  | 651 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 652 | inline _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 653 | unordered_set<_Value, _Hash, _Pred, _Alloc>& | 
|  | 654 | unordered_set<_Value, _Hash, _Pred, _Alloc>::operator=( | 
|  | 655 | initializer_list<value_type> __il) | 
|  | 656 | { | 
|  | 657 | __table_.__assign_unique(__il.begin(), __il.end()); | 
|  | 658 | return *this; | 
|  | 659 | } | 
|  | 660 |  | 
|  | 661 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 662 | template <class _InputIterator> | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 663 | inline _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 664 | void | 
|  | 665 | unordered_set<_Value, _Hash, _Pred, _Alloc>::insert(_InputIterator __first, | 
|  | 666 | _InputIterator __last) | 
|  | 667 | { | 
|  | 668 | for (; __first != __last; ++__first) | 
|  | 669 | __table_.__insert_unique(*__first); | 
|  | 670 | } | 
|  | 671 |  | 
|  | 672 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 673 | inline _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 674 | void | 
|  | 675 | swap(unordered_set<_Value, _Hash, _Pred, _Alloc>& __x, | 
|  | 676 | unordered_set<_Value, _Hash, _Pred, _Alloc>& __y) | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 677 | _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y))) | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 678 | { | 
|  | 679 | __x.swap(__y); | 
|  | 680 | } | 
|  | 681 |  | 
|  | 682 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 683 | bool | 
|  | 684 | operator==(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x, | 
|  | 685 | const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y) | 
|  | 686 | { | 
|  | 687 | if (__x.size() != __y.size()) | 
|  | 688 | return false; | 
|  | 689 | typedef typename unordered_set<_Value, _Hash, _Pred, _Alloc>::const_iterator | 
|  | 690 | const_iterator; | 
|  | 691 | for (const_iterator __i = __x.begin(), __ex = __x.end(), __ey = __y.end(); | 
|  | 692 | __i != __ex; ++__i) | 
|  | 693 | { | 
|  | 694 | const_iterator __j = __y.find(*__i); | 
|  | 695 | if (__j == __ey || !(*__i == *__j)) | 
|  | 696 | return false; | 
|  | 697 | } | 
|  | 698 | return true; | 
|  | 699 | } | 
|  | 700 |  | 
|  | 701 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 702 | inline _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 703 | bool | 
|  | 704 | operator!=(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x, | 
|  | 705 | const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y) | 
|  | 706 | { | 
|  | 707 | return !(__x == __y); | 
|  | 708 | } | 
|  | 709 |  | 
|  | 710 | template <class _Value, class _Hash = hash<_Value>, class _Pred = equal_to<_Value>, | 
|  | 711 | class _Alloc = allocator<_Value> > | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 712 | class _LIBCPP_VISIBLE unordered_multiset | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 713 | { | 
|  | 714 | public: | 
|  | 715 | // types | 
|  | 716 | typedef _Value                                                     key_type; | 
|  | 717 | typedef key_type                                                   value_type; | 
|  | 718 | typedef _Hash                                                      hasher; | 
|  | 719 | typedef _Pred                                                      key_equal; | 
|  | 720 | typedef _Alloc                                                     allocator_type; | 
|  | 721 | typedef value_type&                                                reference; | 
|  | 722 | typedef const value_type&                                          const_reference; | 
|  | 723 |  | 
|  | 724 | private: | 
|  | 725 | typedef __hash_table<value_type, hasher, key_equal, allocator_type> __table; | 
|  | 726 |  | 
|  | 727 | __table __table_; | 
|  | 728 |  | 
|  | 729 | public: | 
|  | 730 | typedef typename __table::pointer         pointer; | 
|  | 731 | typedef typename __table::const_pointer   const_pointer; | 
|  | 732 | typedef typename __table::size_type       size_type; | 
|  | 733 | typedef typename __table::difference_type difference_type; | 
|  | 734 |  | 
|  | 735 | typedef typename __table::const_iterator       iterator; | 
|  | 736 | typedef typename __table::const_iterator       const_iterator; | 
|  | 737 | typedef typename __table::const_local_iterator local_iterator; | 
|  | 738 | typedef typename __table::const_local_iterator const_local_iterator; | 
|  | 739 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 740 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 741 | unordered_multiset() | 
|  | 742 | _NOEXCEPT_(is_nothrow_default_constructible<__table>::value) | 
|  | 743 | {} // = default | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 744 | explicit unordered_multiset(size_type __n, const hasher& __hf = hasher(), | 
|  | 745 | const key_equal& __eql = key_equal()); | 
|  | 746 | unordered_multiset(size_type __n, const hasher& __hf, | 
|  | 747 | const key_equal& __eql, const allocator_type& __a); | 
|  | 748 | template <class _InputIterator> | 
|  | 749 | unordered_multiset(_InputIterator __first, _InputIterator __last); | 
|  | 750 | template <class _InputIterator> | 
|  | 751 | unordered_multiset(_InputIterator __first, _InputIterator __last, | 
|  | 752 | size_type __n, const hasher& __hf = hasher(), | 
|  | 753 | const key_equal& __eql = key_equal()); | 
|  | 754 | template <class _InputIterator> | 
|  | 755 | unordered_multiset(_InputIterator __first, _InputIterator __last, | 
|  | 756 | size_type __n , const hasher& __hf, | 
|  | 757 | const key_equal& __eql, const allocator_type& __a); | 
|  | 758 | explicit unordered_multiset(const allocator_type& __a); | 
|  | 759 | unordered_multiset(const unordered_multiset& __u); | 
|  | 760 | unordered_multiset(const unordered_multiset& __u, const allocator_type& __a); | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 761 | #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 762 | unordered_multiset(unordered_multiset&& __u) | 
|  | 763 | _NOEXCEPT_(is_nothrow_move_constructible<__table>::value); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 764 | unordered_multiset(unordered_multiset&& __u, const allocator_type& __a); | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 765 | #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 766 | unordered_multiset(initializer_list<value_type> __il); | 
|  | 767 | unordered_multiset(initializer_list<value_type> __il, size_type __n, | 
|  | 768 | const hasher& __hf = hasher(), | 
|  | 769 | const key_equal& __eql = key_equal()); | 
|  | 770 | unordered_multiset(initializer_list<value_type> __il, size_type __n, | 
|  | 771 | const hasher& __hf, const key_equal& __eql, | 
|  | 772 | const allocator_type& __a); | 
|  | 773 | // ~unordered_multiset() = default; | 
| Howard Hinnant | 61aa601 | 2011-07-01 19:24:36 +0000 | [diff] [blame^] | 774 | _LIBCPP_INLINE_VISIBILITY | 
|  | 775 | unordered_multiset& operator=(const unordered_multiset& __u) | 
|  | 776 | { | 
|  | 777 | __table_ = __u.__table_; | 
|  | 778 | return *this; | 
|  | 779 | } | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 780 | #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 781 | unordered_multiset& operator=(unordered_multiset&& __u) | 
|  | 782 | _NOEXCEPT_(is_nothrow_move_assignable<__table>::value); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 783 | #endif | 
|  | 784 | unordered_multiset& operator=(initializer_list<value_type> __il); | 
|  | 785 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 786 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 787 | allocator_type get_allocator() const _NOEXCEPT | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 788 | {return allocator_type(__table_.__node_alloc());} | 
|  | 789 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 790 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 791 | bool      empty() const _NOEXCEPT {return __table_.size() == 0;} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 792 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 793 | size_type size() const _NOEXCEPT  {return __table_.size();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 794 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 795 | size_type max_size() const _NOEXCEPT {return __table_.max_size();} | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 796 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 797 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 798 | iterator       begin() _NOEXCEPT        {return __table_.begin();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 799 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 800 | iterator       end() _NOEXCEPT          {return __table_.end();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 801 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 802 | const_iterator begin()  const _NOEXCEPT {return __table_.begin();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 803 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 804 | const_iterator end()    const _NOEXCEPT {return __table_.end();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 805 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 806 | const_iterator cbegin() const _NOEXCEPT {return __table_.begin();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 807 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 808 | const_iterator cend()   const _NOEXCEPT {return __table_.end();} | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 809 |  | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 810 | #if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS) | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 811 | template <class... _Args> | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 812 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 813 | iterator emplace(_Args&&... __args) | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 +0000 | [diff] [blame] | 814 | {return __table_.__emplace_multi(_VSTD::forward<_Args>(__args)...);} | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 815 | template <class... _Args> | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 816 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 817 | iterator emplace_hint(const_iterator __p, _Args&&... __args) | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 +0000 | [diff] [blame] | 818 | {return __table_.__emplace_hint_multi(__p, _VSTD::forward<_Args>(__args)...);} | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 819 | #endif  // !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS) | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 820 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 821 | iterator insert(const value_type& __x) {return __table_.__insert_multi(__x);} | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 822 | #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 823 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 +0000 | [diff] [blame] | 824 | iterator insert(value_type&& __x) {return __table_.__insert_multi(_VSTD::move(__x));} | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 825 | #endif | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 826 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 827 | iterator insert(const_iterator __p, const value_type& __x) | 
|  | 828 | {return __table_.__insert_multi(__p, __x);} | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 829 | #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 830 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 831 | iterator insert(const_iterator __p, value_type&& __x) | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 +0000 | [diff] [blame] | 832 | {return __table_.__insert_multi(__p, _VSTD::move(__x));} | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 833 | #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 834 | template <class _InputIterator> | 
|  | 835 | void insert(_InputIterator __first, _InputIterator __last); | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 836 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 837 | void insert(initializer_list<value_type> __il) | 
|  | 838 | {insert(__il.begin(), __il.end());} | 
|  | 839 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 840 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 841 | iterator erase(const_iterator __p) {return __table_.erase(__p);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 842 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 843 | size_type erase(const key_type& __k) {return __table_.__erase_multi(__k);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 844 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 845 | iterator erase(const_iterator __first, const_iterator __last) | 
|  | 846 | {return __table_.erase(__first, __last);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 847 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 848 | void clear() _NOEXCEPT {__table_.clear();} | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 849 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 850 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 851 | void swap(unordered_multiset& __u) | 
|  | 852 | _NOEXCEPT_(__is_nothrow_swappable<__table>::value) | 
|  | 853 | {__table_.swap(__u.__table_);} | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 854 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 855 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 856 | hasher hash_function() const {return __table_.hash_function();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 857 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 858 | key_equal key_eq() const {return __table_.key_eq();} | 
|  | 859 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 860 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 861 | iterator       find(const key_type& __k)       {return __table_.find(__k);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 862 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 863 | const_iterator find(const key_type& __k) const {return __table_.find(__k);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 864 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 865 | size_type count(const key_type& __k) const {return __table_.__count_multi(__k);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 866 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 867 | pair<iterator, iterator>             equal_range(const key_type& __k) | 
|  | 868 | {return __table_.__equal_range_multi(__k);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 869 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 870 | pair<const_iterator, const_iterator> equal_range(const key_type& __k) const | 
|  | 871 | {return __table_.__equal_range_multi(__k);} | 
|  | 872 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 873 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 874 | size_type bucket_count() const _NOEXCEPT {return __table_.bucket_count();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 875 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 876 | size_type max_bucket_count() const _NOEXCEPT {return __table_.max_bucket_count();} | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 877 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 878 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 879 | size_type bucket_size(size_type __n) const {return __table_.bucket_size(__n);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 880 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 881 | size_type bucket(const key_type& __k) const {return __table_.bucket(__k);} | 
|  | 882 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 883 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 884 | local_iterator       begin(size_type __n)        {return __table_.begin(__n);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 885 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 886 | local_iterator       end(size_type __n)          {return __table_.end(__n);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 887 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 888 | const_local_iterator begin(size_type __n) const  {return __table_.cbegin(__n);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 889 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 890 | const_local_iterator end(size_type __n) const    {return __table_.cend(__n);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 891 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 892 | const_local_iterator cbegin(size_type __n) const {return __table_.cbegin(__n);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 893 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 894 | const_local_iterator cend(size_type __n) const   {return __table_.cend(__n);} | 
|  | 895 |  | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 896 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 897 | float load_factor() const _NOEXCEPT {return __table_.load_factor();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 898 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 899 | float max_load_factor() const _NOEXCEPT {return __table_.max_load_factor();} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 900 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 901 | void max_load_factor(float __mlf) {__table_.max_load_factor(__mlf);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 902 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 903 | void rehash(size_type __n) {__table_.rehash(__n);} | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 904 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 905 | void reserve(size_type __n) {__table_.reserve(__n);} | 
|  | 906 | }; | 
|  | 907 |  | 
|  | 908 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 909 | unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset( | 
|  | 910 | size_type __n, const hasher& __hf, const key_equal& __eql) | 
|  | 911 | : __table_(__hf, __eql) | 
|  | 912 | { | 
|  | 913 | __table_.rehash(__n); | 
|  | 914 | } | 
|  | 915 |  | 
|  | 916 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 917 | unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset( | 
|  | 918 | size_type __n, const hasher& __hf, const key_equal& __eql, | 
|  | 919 | const allocator_type& __a) | 
|  | 920 | : __table_(__hf, __eql, __a) | 
|  | 921 | { | 
|  | 922 | __table_.rehash(__n); | 
|  | 923 | } | 
|  | 924 |  | 
|  | 925 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 926 | template <class _InputIterator> | 
|  | 927 | unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset( | 
|  | 928 | _InputIterator __first, _InputIterator __last) | 
|  | 929 | { | 
|  | 930 | insert(__first, __last); | 
|  | 931 | } | 
|  | 932 |  | 
|  | 933 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 934 | template <class _InputIterator> | 
|  | 935 | unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset( | 
|  | 936 | _InputIterator __first, _InputIterator __last, size_type __n, | 
|  | 937 | const hasher& __hf, const key_equal& __eql) | 
|  | 938 | : __table_(__hf, __eql) | 
|  | 939 | { | 
|  | 940 | __table_.rehash(__n); | 
|  | 941 | insert(__first, __last); | 
|  | 942 | } | 
|  | 943 |  | 
|  | 944 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 945 | template <class _InputIterator> | 
|  | 946 | unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset( | 
|  | 947 | _InputIterator __first, _InputIterator __last, size_type __n, | 
|  | 948 | const hasher& __hf, const key_equal& __eql, const allocator_type& __a) | 
|  | 949 | : __table_(__hf, __eql, __a) | 
|  | 950 | { | 
|  | 951 | __table_.rehash(__n); | 
|  | 952 | insert(__first, __last); | 
|  | 953 | } | 
|  | 954 |  | 
|  | 955 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 956 | inline _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 957 | unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset( | 
|  | 958 | const allocator_type& __a) | 
|  | 959 | : __table_(__a) | 
|  | 960 | { | 
|  | 961 | } | 
|  | 962 |  | 
|  | 963 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 964 | unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset( | 
|  | 965 | const unordered_multiset& __u) | 
|  | 966 | : __table_(__u.__table_) | 
|  | 967 | { | 
|  | 968 | __table_.rehash(__u.bucket_count()); | 
|  | 969 | insert(__u.begin(), __u.end()); | 
|  | 970 | } | 
|  | 971 |  | 
|  | 972 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 973 | unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset( | 
|  | 974 | const unordered_multiset& __u, const allocator_type& __a) | 
|  | 975 | : __table_(__u.__table_, __a) | 
|  | 976 | { | 
|  | 977 | __table_.rehash(__u.bucket_count()); | 
|  | 978 | insert(__u.begin(), __u.end()); | 
|  | 979 | } | 
|  | 980 |  | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 981 | #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 982 |  | 
|  | 983 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 984 | inline _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 985 | unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset( | 
|  | 986 | unordered_multiset&& __u) | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 987 | _NOEXCEPT_(is_nothrow_move_constructible<__table>::value) | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 +0000 | [diff] [blame] | 988 | : __table_(_VSTD::move(__u.__table_)) | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 989 | { | 
|  | 990 | } | 
|  | 991 |  | 
|  | 992 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 993 | unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset( | 
|  | 994 | unordered_multiset&& __u, const allocator_type& __a) | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 +0000 | [diff] [blame] | 995 | : __table_(_VSTD::move(__u.__table_), __a) | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 996 | { | 
|  | 997 | if (__a != __u.get_allocator()) | 
|  | 998 | { | 
|  | 999 | iterator __i = __u.begin(); | 
|  | 1000 | while (__u.size() != 0) | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 +0000 | [diff] [blame] | 1001 | __table_.__insert_multi(_VSTD::move(__u.__table_.remove(__i++)->__value_)); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 1002 | } | 
|  | 1003 | } | 
|  | 1004 |  | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 1005 | #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 1006 |  | 
|  | 1007 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 1008 | unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset( | 
|  | 1009 | initializer_list<value_type> __il) | 
|  | 1010 | { | 
|  | 1011 | insert(__il.begin(), __il.end()); | 
|  | 1012 | } | 
|  | 1013 |  | 
|  | 1014 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 1015 | unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset( | 
|  | 1016 | initializer_list<value_type> __il, size_type __n, const hasher& __hf, | 
|  | 1017 | const key_equal& __eql) | 
|  | 1018 | : __table_(__hf, __eql) | 
|  | 1019 | { | 
|  | 1020 | __table_.rehash(__n); | 
|  | 1021 | insert(__il.begin(), __il.end()); | 
|  | 1022 | } | 
|  | 1023 |  | 
|  | 1024 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 1025 | unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset( | 
|  | 1026 | initializer_list<value_type> __il, size_type __n, const hasher& __hf, | 
|  | 1027 | const key_equal& __eql, const allocator_type& __a) | 
|  | 1028 | : __table_(__hf, __eql, __a) | 
|  | 1029 | { | 
|  | 1030 | __table_.rehash(__n); | 
|  | 1031 | insert(__il.begin(), __il.end()); | 
|  | 1032 | } | 
|  | 1033 |  | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 1034 | #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 1035 |  | 
|  | 1036 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 1037 | inline _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 1038 | unordered_multiset<_Value, _Hash, _Pred, _Alloc>& | 
|  | 1039 | unordered_multiset<_Value, _Hash, _Pred, _Alloc>::operator=( | 
|  | 1040 | unordered_multiset&& __u) | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 1041 | _NOEXCEPT_(is_nothrow_move_assignable<__table>::value) | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 1042 | { | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 +0000 | [diff] [blame] | 1043 | __table_ = _VSTD::move(__u.__table_); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 1044 | return *this; | 
|  | 1045 | } | 
|  | 1046 |  | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 +0000 | [diff] [blame] | 1047 | #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 1048 |  | 
|  | 1049 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 1050 | inline | 
|  | 1051 | unordered_multiset<_Value, _Hash, _Pred, _Alloc>& | 
|  | 1052 | unordered_multiset<_Value, _Hash, _Pred, _Alloc>::operator=( | 
|  | 1053 | initializer_list<value_type> __il) | 
|  | 1054 | { | 
|  | 1055 | __table_.__assign_multi(__il.begin(), __il.end()); | 
|  | 1056 | return *this; | 
|  | 1057 | } | 
|  | 1058 |  | 
|  | 1059 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 1060 | template <class _InputIterator> | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 1061 | inline _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 1062 | void | 
|  | 1063 | unordered_multiset<_Value, _Hash, _Pred, _Alloc>::insert(_InputIterator __first, | 
|  | 1064 | _InputIterator __last) | 
|  | 1065 | { | 
|  | 1066 | for (; __first != __last; ++__first) | 
|  | 1067 | __table_.__insert_multi(*__first); | 
|  | 1068 | } | 
|  | 1069 |  | 
|  | 1070 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 1071 | inline _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 1072 | void | 
|  | 1073 | swap(unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, | 
|  | 1074 | unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) | 
| Howard Hinnant | 04dae1d | 2011-06-04 20:18:37 +0000 | [diff] [blame] | 1075 | _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y))) | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 1076 | { | 
|  | 1077 | __x.swap(__y); | 
|  | 1078 | } | 
|  | 1079 |  | 
|  | 1080 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
|  | 1081 | bool | 
|  | 1082 | operator==(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, | 
|  | 1083 | const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) | 
|  | 1084 | { | 
|  | 1085 | if (__x.size() != __y.size()) | 
|  | 1086 | return false; | 
|  | 1087 | typedef typename unordered_multiset<_Value, _Hash, _Pred, _Alloc>::const_iterator | 
|  | 1088 | const_iterator; | 
|  | 1089 | typedef pair<const_iterator, const_iterator> _EqRng; | 
|  | 1090 | for (const_iterator __i = __x.begin(), __ex = __x.end(); __i != __ex;) | 
|  | 1091 | { | 
|  | 1092 | _EqRng __xeq = __x.equal_range(*__i); | 
|  | 1093 | _EqRng __yeq = __y.equal_range(*__i); | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 +0000 | [diff] [blame] | 1094 | if (_VSTD::distance(__xeq.first, __xeq.second) != | 
|  | 1095 | _VSTD::distance(__yeq.first, __yeq.second) || | 
|  | 1096 | !_VSTD::is_permutation(__xeq.first, __xeq.second, __yeq.first)) | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 1097 | return false; | 
|  | 1098 | __i = __xeq.second; | 
|  | 1099 | } | 
|  | 1100 | return true; | 
|  | 1101 | } | 
|  | 1102 |  | 
|  | 1103 | template <class _Value, class _Hash, class _Pred, class _Alloc> | 
| Howard Hinnant | ee6ccd0 | 2010-09-23 18:58:28 +0000 | [diff] [blame] | 1104 | inline _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 +0000 | [diff] [blame] | 1105 | bool | 
|  | 1106 | operator!=(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, | 
|  | 1107 | const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) | 
|  | 1108 | { | 
|  | 1109 | return !(__x == __y); | 
|  | 1110 | } | 
|  | 1111 |  | 
|  | 1112 | _LIBCPP_END_NAMESPACE_STD | 
|  | 1113 |  | 
|  | 1114 | #endif  // _LIBCPP_UNORDERED_SET |