_hash_set.h revision e46c9386c4f79aa40185f79a19fc5b2a7ef528b3
15faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org/*
25faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org *
35faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org * Copyright (c) 1994
45faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org * Hewlett-Packard Company
55faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org *
65faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org * Copyright (c) 1996,1997
75faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org * Silicon Graphics Computer Systems, Inc.
85faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org *
95faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org * Copyright (c) 1997
105faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org * Moscow Center for SPARC Technology
118b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org *
128b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org * Copyright (c) 1999
135faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org * Boris Fomitchev
148640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org *
155faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org * This material is provided "as is", with absolutely no warranty expressed
163bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org * or implied. Any use is at your own risk.
17ac9779234ef7a8cf3d791ab7690ef8c388662836joshualitt *
183bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org * Permission to use or copy this software for any purpose is hereby granted
193bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org * without fee, provided the above notices are retained on all copies.
207938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org * Permission to modify the code and to distribute modified code is granted,
217938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org * provided the above notices are retained, and a notice that the code was
227938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org * modified is included with the above copyright notice.
237938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org *
247938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org */
25cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org
267938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org/* NOTE: This is an internal header file, included by other STL headers.
277938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org *   You should not attempt to use it directly.
287938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org */
295e5f948b6b363dbfc8c076d8ff0c6b8e9ea99958senorblanco
305e5f948b6b363dbfc8c076d8ff0c6b8e9ea99958senorblanco#ifndef _STLP_INTERNAL_HASH_SET_H
315e5f948b6b363dbfc8c076d8ff0c6b8e9ea99958senorblanco#define _STLP_INTERNAL_HASH_SET_H
325faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org
335faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#ifndef _STLP_INTERNAL_HASHTABLE_H
345faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#  include <stl/_hashtable.h>
35cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org#endif
368640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org
378640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org_STLP_BEGIN_NAMESPACE
385faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org
395faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org//Specific iterator traits creation
405faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org_STLP_CREATE_HASH_ITERATOR_TRAITS(HashSetTraitsT, Const_traits)
413bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org
42cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.orgtemplate <class _Value, _STLP_DFL_TMPL_PARAM(_HashFcn,hash<_Value>),
43cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org          _STLP_DFL_TMPL_PARAM(_EqualKey, equal_to<_Value>),
445faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org          _STLP_DFL_TMPL_PARAM(_Alloc, allocator<_Value>) >
455faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.orgclass hash_set
469fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND)
479fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed               : public __stlport_class<hash_set<_Value, _HashFcn, _EqualKey, _Alloc> >
489fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#endif
499fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed{
509fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed  typedef hash_set<_Value, _HashFcn, _EqualKey, _Alloc> _Self;
519fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed  //Specific iterator traits creation
529fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed  typedef _STLP_PRIV _HashSetTraitsT<_Value> _HashSetTraits;
539fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reedpublic:
549fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed  typedef hashtable<_Value, _Value, _HashFcn,
559fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed                    _HashSetTraits, _STLP_PRIV _Identity<_Value>, _EqualKey, _Alloc> _Ht;
569fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reedpublic:
579fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed  typedef typename _Ht::key_type key_type;
589fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed  typedef typename _Ht::value_type value_type;
598b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org  typedef typename _Ht::hasher hasher;
60ce33d60187718e7bb01944ee130c9f5d9fb335eccommit-bot@chromium.org  typedef typename _Ht::key_equal key_equal;
61025128811219dc45fd99b6c4d1d14f833cf7a26ecommit-bot@chromium.org
62025128811219dc45fd99b6c4d1d14f833cf7a26ecommit-bot@chromium.org  typedef typename _Ht::size_type size_type;
63025128811219dc45fd99b6c4d1d14f833cf7a26ecommit-bot@chromium.org  typedef typename _Ht::difference_type difference_type;
645faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  typedef typename _Ht::pointer         pointer;
655faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  typedef typename _Ht::const_pointer   const_pointer;
66d594dbec0407343b7ac13af9c4580ec5933ab060commit-bot@chromium.org  typedef typename _Ht::reference       reference;
67d594dbec0407343b7ac13af9c4580ec5933ab060commit-bot@chromium.org  typedef typename _Ht::const_reference const_reference;
68d594dbec0407343b7ac13af9c4580ec5933ab060commit-bot@chromium.org
69d594dbec0407343b7ac13af9c4580ec5933ab060commit-bot@chromium.org  typedef typename _Ht::iterator iterator;
70025128811219dc45fd99b6c4d1d14f833cf7a26ecommit-bot@chromium.org  typedef typename _Ht::const_iterator const_iterator;
71025128811219dc45fd99b6c4d1d14f833cf7a26ecommit-bot@chromium.org
72d594dbec0407343b7ac13af9c4580ec5933ab060commit-bot@chromium.org  typedef typename _Ht::allocator_type allocator_type;
73025128811219dc45fd99b6c4d1d14f833cf7a26ecommit-bot@chromium.org
74025128811219dc45fd99b6c4d1d14f833cf7a26ecommit-bot@chromium.org  hasher hash_funct() const { return _M_ht.hash_funct(); }
75d594dbec0407343b7ac13af9c4580ec5933ab060commit-bot@chromium.org  key_equal key_eq() const { return _M_ht.key_eq(); }
76d594dbec0407343b7ac13af9c4580ec5933ab060commit-bot@chromium.org  allocator_type get_allocator() const { return _M_ht.get_allocator(); }
77d594dbec0407343b7ac13af9c4580ec5933ab060commit-bot@chromium.org
785faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.orgprivate:
795faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  _Ht _M_ht;
80cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org  _STLP_KEY_TYPE_FOR_CONT_EXT(key_type)
81cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org
825faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.orgpublic:
838640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  hash_set()
84d594dbec0407343b7ac13af9c4580ec5933ab060commit-bot@chromium.org    : _M_ht(0, hasher(), key_equal(), allocator_type()) {}
85d594dbec0407343b7ac13af9c4580ec5933ab060commit-bot@chromium.org  explicit hash_set(size_type __n)
86c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org    : _M_ht(__n, hasher(), key_equal(), allocator_type()) {}
8756d135c03e1d38f0b9e17d79a3cbf8db2a915086sugoi  hash_set(size_type __n, const hasher& __hf)
8856d135c03e1d38f0b9e17d79a3cbf8db2a915086sugoi    : _M_ht(__n, __hf, key_equal(), allocator_type()) {}
8956d135c03e1d38f0b9e17d79a3cbf8db2a915086sugoi#if !defined (_STLP_DONT_SUP_DFLT_PARAM)
905faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  hash_set(size_type __n, const hasher& __hf, const key_equal& __eql,
919fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed           const allocator_type& __a = allocator_type())
929fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#else
939fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed  hash_set(size_type __n, const hasher& __hf, const key_equal& __eql)
949fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed    : _M_ht(__n, __hf, __eql, allocator_type()) {}
959fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed  hash_set(size_type __n, const hasher& __hf, const key_equal& __eql,
969fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed           const allocator_type& __a)
979fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#endif
989fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed    : _M_ht(__n, __hf, __eql, __a) {}
999fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed
1009fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#if !defined (_STLP_NO_MOVE_SEMANTIC)
1019fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed  hash_set(__move_source<_Self> src)
1029fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed    : _M_ht(__move_source<_Ht>(src.get()._M_ht)) {}
1039fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#endif
1049fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed
1059fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#if defined (_STLP_MEMBER_TEMPLATES)
1069fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed  template <class _InputIterator>
1079fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed  hash_set(_InputIterator __f, _InputIterator __l)
1089fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed    : _M_ht(0, hasher(), key_equal(), allocator_type())
1099fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed    { _M_ht.insert_unique(__f, __l); }
1109fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed  template <class _InputIterator>
1119fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed  hash_set(_InputIterator __f, _InputIterator __l, size_type __n)
1129fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed    : _M_ht(__n, hasher(), key_equal(), allocator_type())
1139fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed    { _M_ht.insert_unique(__f, __l); }
1149fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed  template <class _InputIterator>
1159fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed  hash_set(_InputIterator __f, _InputIterator __l, size_type __n,
1165e5f948b6b363dbfc8c076d8ff0c6b8e9ea99958senorblanco           const hasher& __hf)
1179fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed    : _M_ht(__n, __hf, key_equal(), allocator_type())
1185faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    { _M_ht.insert_unique(__f, __l); }
1198b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org  template <class _InputIterator>
1205faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  hash_set(_InputIterator __f, _InputIterator __l, size_type __n,
1215faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org           const hasher& __hf, const key_equal& __eql,
1225faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org           const allocator_type& __a _STLP_ALLOCATOR_TYPE_DFL)
1235faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    : _M_ht(__n, __hf, __eql, __a)
1245faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    { _M_ht.insert_unique(__f, __l); }
1255faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#  if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS)
126cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org  template <class _InputIterator>
127cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org  hash_set(_InputIterator __f, _InputIterator __l, size_type __n,
1285faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org           const hasher& __hf, const key_equal& __eql)
1298640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org    : _M_ht(__n, __hf, __eql, allocator_type())
1305faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    { _M_ht.insert_unique(__f, __l); }
1315faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#  endif
1325faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#else
1335faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  hash_set(const value_type* __f, const value_type* __l)
1345faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    : _M_ht(0, hasher(), key_equal(), allocator_type())
1355faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    { _M_ht.insert_unique(__f, __l); }
1365faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  hash_set(const value_type* __f, const value_type* __l, size_type __n)
1375faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    : _M_ht(__n, hasher(), key_equal(), allocator_type())
1387938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org    { _M_ht.insert_unique(__f, __l); }
1395faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  hash_set(const value_type* __f, const value_type* __l, size_type __n,
1405faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org           const hasher& __hf)
1415faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    : _M_ht(__n, __hf, key_equal(), allocator_type())
1425faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    { _M_ht.insert_unique(__f, __l); }
1435faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  hash_set(const value_type* __f, const value_type* __l, size_type __n,
1445faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org           const hasher& __hf, const key_equal& __eql,
1457938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org           const allocator_type& __a = allocator_type())
1467938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org    : _M_ht(__n, __hf, __eql, __a)
1477938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org    { _M_ht.insert_unique(__f, __l); }
1485faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org
1495faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  hash_set(const_iterator __f, const_iterator __l)
1505faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    : _M_ht(0, hasher(), key_equal(), allocator_type())
1515faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    { _M_ht.insert_unique(__f, __l); }
1525faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  hash_set(const_iterator __f, const_iterator __l, size_type __n)
1535faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    : _M_ht(__n, hasher(), key_equal(), allocator_type())
1547938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org    { _M_ht.insert_unique(__f, __l); }
1557938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org  hash_set(const_iterator __f, const_iterator __l, size_type __n,
1567938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org           const hasher& __hf)
1577938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org    : _M_ht(__n, __hf, key_equal(), allocator_type())
1587938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org    { _M_ht.insert_unique(__f, __l); }
1595faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  hash_set(const_iterator __f, const_iterator __l, size_type __n,
1607938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org           const hasher& __hf, const key_equal& __eql,
1617938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org           const allocator_type& __a = allocator_type())
1625faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    : _M_ht(__n, __hf, __eql, __a)
1635faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    { _M_ht.insert_unique(__f, __l); }
1645faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#endif /*_STLP_MEMBER_TEMPLATES */
1655faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org
1665faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.orgpublic:
1675faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  size_type size() const { return _M_ht.size(); }
1685faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  size_type max_size() const { return _M_ht.max_size(); }
1697938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org  bool empty() const { return _M_ht.empty(); }
1707938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org  void swap(_Self& __hs) { _M_ht.swap(__hs._M_ht); }
1715faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)
1725faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  void _M_swap_workaround(_Self& __x) { swap(__x); }
1735faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#endif
1745faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org
1755faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  iterator begin() { return _M_ht.begin(); }
1765faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  iterator end() { return _M_ht.end(); }
1775faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  const_iterator begin() const { return _M_ht.begin(); }
1788640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  const_iterator end() const { return _M_ht.end(); }
1797938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org
1807938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.orgpublic:
1818c7372bbe8949f2864bd3d9df00d85c5669a74b1senorblanco@chromium.org  pair<iterator, bool> insert(const value_type& __obj)
182ae761f7545d8ebf181d220169afac2056b057b8ccommit-bot@chromium.org  { return _M_ht.insert_unique(__obj); }
1838c7372bbe8949f2864bd3d9df00d85c5669a74b1senorblanco@chromium.org#if defined (_STLP_MEMBER_TEMPLATES)
1848c7372bbe8949f2864bd3d9df00d85c5669a74b1senorblanco@chromium.org  template <class _InputIterator>
1859195743aac79a4fa82059ab614b9795f215475f7senorblanco@chromium.org  void insert(_InputIterator __f, _InputIterator __l)
1869195743aac79a4fa82059ab614b9795f215475f7senorblanco@chromium.org#else
1875faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  void insert(const_iterator __f, const_iterator __l)
1887938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org  {_M_ht.insert_unique(__f, __l); }
1895faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  void insert(const value_type* __f, const value_type* __l)
1905faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#endif
1915faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  { _M_ht.insert_unique(__f,__l); }
1925faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org
1937938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org  pair<iterator, bool> insert_noresize(const value_type& __obj)
194cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org  { return _M_ht.insert_unique_noresize(__obj); }
195cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org
1967938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org  _STLP_TEMPLATE_FOR_CONT_EXT
1975faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  iterator find(const _KT& __key) { return _M_ht.find(__key); }
1988640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  _STLP_TEMPLATE_FOR_CONT_EXT
1998640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  const_iterator find(const _KT& __key) const { return _M_ht.find(__key); }
2008640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org
2015faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  _STLP_TEMPLATE_FOR_CONT_EXT
2025faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  size_type count(const _KT& __key) const { return _M_ht.count(__key); }
2035faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org
2045faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  _STLP_TEMPLATE_FOR_CONT_EXT
2055faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  pair<iterator, iterator> equal_range(const _KT& __key)
2068640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  { return _M_ht.equal_range(__key); }
2078640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  _STLP_TEMPLATE_FOR_CONT_EXT
2083bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org  pair<const_iterator, const_iterator> equal_range(const _KT& __key) const
209cc9471c36d3967270f7eb26f8b53ce0f17bc9fbbsenorblanco@chromium.org  { return _M_ht.equal_range(__key); }
210cc9471c36d3967270f7eb26f8b53ce0f17bc9fbbsenorblanco@chromium.org
211cc9471c36d3967270f7eb26f8b53ce0f17bc9fbbsenorblanco@chromium.org  _STLP_TEMPLATE_FOR_CONT_EXT
2128640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  size_type erase(const _KT& __key) {return _M_ht.erase(__key); }
2137938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org  void erase(iterator __it) { _M_ht.erase(__it); }
2148640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  void erase(iterator __f, iterator __l) { _M_ht.erase(__f, __l); }
2158640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  void clear() { _M_ht.clear(); }
2168640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org
2178640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.orgpublic:
2185faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  void resize(size_type __hint) { _M_ht.resize(__hint); }
2195faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  size_type bucket_count() const { return _M_ht.bucket_count(); }
2205faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  size_type max_bucket_count() const { return _M_ht.max_bucket_count(); }
2215faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  size_type elems_in_bucket(size_type __n) const
2228640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  { return _M_ht.elems_in_bucket(__n); }
2237938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org};
2247938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org
2257938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org//Specific iterator traits creation
226ae761f7545d8ebf181d220169afac2056b057b8ccommit-bot@chromium.org_STLP_CREATE_HASH_ITERATOR_TRAITS(HashMultisetTraitsT, Const_traits)
2278640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org
2287938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.orgtemplate <class _Value, _STLP_DFL_TMPL_PARAM(_HashFcn,hash<_Value>),
2298640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org          _STLP_DFL_TMPL_PARAM(_EqualKey, equal_to<_Value>),
2307938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org          _STLP_DFL_TMPL_PARAM(_Alloc, allocator<_Value>) >
2318640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.orgclass hash_multiset
2328640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND)
2338640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org                    : public __stlport_class<hash_multiset<_Value, _HashFcn, _EqualKey, _Alloc> >
2347938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org#endif
2357938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org{
2367938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org  typedef hash_multiset<_Value, _HashFcn, _EqualKey, _Alloc> _Self;
237ae761f7545d8ebf181d220169afac2056b057b8ccommit-bot@chromium.org  //Specific iterator traits creation
2387938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org  typedef _STLP_PRIV _HashMultisetTraitsT<_Value> _HashMultisetTraits;
2395faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.orgpublic:
2405faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  typedef hashtable<_Value, _Value, _HashFcn,
2417938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org                    _HashMultisetTraits, _STLP_PRIV _Identity<_Value>, _EqualKey, _Alloc> _Ht;
2427938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org
2437938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org  typedef typename _Ht::key_type key_type;
244ae761f7545d8ebf181d220169afac2056b057b8ccommit-bot@chromium.org  typedef typename _Ht::value_type value_type;
2455faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  typedef typename _Ht::hasher hasher;
2465faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  typedef typename _Ht::key_equal key_equal;
2477938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org
2485faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  typedef typename _Ht::size_type size_type;
2495faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  typedef typename _Ht::difference_type difference_type;
2507938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org  typedef typename _Ht::pointer       pointer;
2515faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  typedef typename _Ht::const_pointer const_pointer;
2525faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  typedef typename _Ht::reference reference;
2537938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org  typedef typename _Ht::const_reference const_reference;
2545faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org
2555faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  typedef typename _Ht::iterator iterator;
2565faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  typedef typename _Ht::const_iterator const_iterator;
2575faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org
258377c14a1e648f4427bd11474fad8ac264d98aff2senorblanco@chromium.org  typedef typename _Ht::allocator_type allocator_type;
2598640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org
2608640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  hasher hash_funct() const { return _M_ht.hash_funct(); }
2618640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  key_equal key_eq() const { return _M_ht.key_eq(); }
2628640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  allocator_type get_allocator() const { return _M_ht.get_allocator(); }
2638640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org
2648640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.orgprivate:
2658640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  _Ht _M_ht;
2668640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  _STLP_KEY_TYPE_FOR_CONT_EXT(key_type)
2678640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org
268848250415eddc54075f7eb8795e8db79e749c6abreedpublic:
2698640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  hash_multiset()
2708640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org    : _M_ht(0, hasher(), key_equal(), allocator_type()) {}
2718640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  explicit hash_multiset(size_type __n)
2728640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org    : _M_ht(__n, hasher(), key_equal(), allocator_type()) {}
2738640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  hash_multiset(size_type __n, const hasher& __hf)
2748640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org    : _M_ht(__n, __hf, key_equal(), allocator_type()) {}
2758640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  hash_multiset(size_type __n, const hasher& __hf, const key_equal& __eql)
2768640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org    : _M_ht(__n, __hf, __eql, allocator_type()) {}
2778640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  hash_multiset(size_type __n, const hasher& __hf, const key_equal& __eql,
2788640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org                const allocator_type& __a)
2798640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org    : _M_ht(__n, __hf, __eql, __a) {}
2808640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org
2815faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#if !defined (_STLP_NO_MOVE_SEMANTIC)
2825faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  hash_multiset(__move_source<_Self> src)
2834cb543d6057b692e1099e9f115155f0bf323a0c8senorblanco@chromium.org    : _M_ht(__move_source<_Ht>(src.get()._M_ht)) {}
2845faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#endif
285ae761f7545d8ebf181d220169afac2056b057b8ccommit-bot@chromium.org
28668400767be5f72e4b9750ccc8bcf0078d42869a7senorblanco@chromium.org#if defined (_STLP_MEMBER_TEMPLATES)
2876776b82d466fa93ccffd251fdf556fe058395444senorblanco@chromium.org  template <class _InputIterator>
2884cb543d6057b692e1099e9f115155f0bf323a0c8senorblanco@chromium.org  hash_multiset(_InputIterator __f, _InputIterator __l)
28968400767be5f72e4b9750ccc8bcf0078d42869a7senorblanco@chromium.org    : _M_ht(0, hasher(), key_equal(), allocator_type())
29068400767be5f72e4b9750ccc8bcf0078d42869a7senorblanco@chromium.org    { _M_ht.insert_equal(__f, __l); }
29168400767be5f72e4b9750ccc8bcf0078d42869a7senorblanco@chromium.org  template <class _InputIterator>
29228fcae2ec77eb16a79e155f8d788b20457f1c951commit-bot@chromium.org  hash_multiset(_InputIterator __f, _InputIterator __l, size_type __n)
2935faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    : _M_ht(__n, hasher(), key_equal(), allocator_type())
2945faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    { _M_ht.insert_equal(__f, __l); }
2955faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  template <class _InputIterator>
2967938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org  hash_multiset(_InputIterator __f, _InputIterator __l, size_type __n,
297118252962f89a80db661a0544f1bd61cbaab6321senorblanco@chromium.org                const hasher& __hf)
2987938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org    : _M_ht(__n, __hf, key_equal(), allocator_type())
2997938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org    { _M_ht.insert_equal(__f, __l); }
3007938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org
3018640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  template <class _InputIterator>
3028640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org  hash_multiset(_InputIterator __f, _InputIterator __l, size_type __n,
3038640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org                const hasher& __hf, const key_equal& __eql,
3048640d5024d57da5508bdf7585849e3b1f1cb365bsenorblanco@chromium.org                const allocator_type& __a _STLP_ALLOCATOR_TYPE_DFL)
3055faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    : _M_ht(__n, __hf, __eql, __a)
3065faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    { _M_ht.insert_equal(__f, __l); }
3075faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#  if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS)
3085faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  template <class _InputIterator>
3095faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  hash_multiset(_InputIterator __f, _InputIterator __l, size_type __n,
310848250415eddc54075f7eb8795e8db79e749c6abreed                const hasher& __hf, const key_equal& __eql)
311cd3b15ca6364a04b0eeeb4f89c7daa8aefe854c8commit-bot@chromium.org    : _M_ht(__n, __hf, __eql, allocator_type())
312cd3b15ca6364a04b0eeeb4f89c7daa8aefe854c8commit-bot@chromium.org    { _M_ht.insert_equal(__f, __l); }
3135faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#  endif
3146776b82d466fa93ccffd251fdf556fe058395444senorblanco@chromium.org#else
3156776b82d466fa93ccffd251fdf556fe058395444senorblanco@chromium.org  hash_multiset(const value_type* __f, const value_type* __l)
3166776b82d466fa93ccffd251fdf556fe058395444senorblanco@chromium.org    : _M_ht(0, hasher(), key_equal(), allocator_type())
317cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org    { _M_ht.insert_equal(__f, __l); }
318cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org  hash_multiset(const value_type* __f, const value_type* __l, size_type __n)
3197938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org    : _M_ht(__n, hasher(), key_equal(), allocator_type())
3207938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org    { _M_ht.insert_equal(__f, __l); }
3217938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org  hash_multiset(const value_type* __f, const value_type* __l, size_type __n,
3227938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org                const hasher& __hf)
3237938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org    : _M_ht(__n, __hf, key_equal(), allocator_type())
3247938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org    { _M_ht.insert_equal(__f, __l); }
3257938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org  hash_multiset(const value_type* __f, const value_type* __l, size_type __n,
3265faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org                const hasher& __hf, const key_equal& __eql,
3277938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org                const allocator_type& __a = allocator_type())
3287938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org    : _M_ht(__n, __hf, __eql, __a)
3297938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org    { _M_ht.insert_equal(__f, __l); }
3307938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org
3317938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org  hash_multiset(const_iterator __f, const_iterator __l)
3327938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org    : _M_ht(0, hasher(), key_equal(), allocator_type())
3335faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    { _M_ht.insert_equal(__f, __l); }
3345faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org  hash_multiset(const_iterator __f, const_iterator __l, size_type __n)
3353bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org    : _M_ht(__n, hasher(), key_equal(), allocator_type())
3360a5c233e3b911232c0d6f9a88ded99ecf88b8a97senorblanco@chromium.org    { _M_ht.insert_equal(__f, __l); }
3370a5c233e3b911232c0d6f9a88ded99ecf88b8a97senorblanco@chromium.org  hash_multiset(const_iterator __f, const_iterator __l, size_type __n,
3380a5c233e3b911232c0d6f9a88ded99ecf88b8a97senorblanco@chromium.org                const hasher& __hf)
3390a5c233e3b911232c0d6f9a88ded99ecf88b8a97senorblanco@chromium.org    : _M_ht(__n, __hf, key_equal(), allocator_type())
3400a5c233e3b911232c0d6f9a88ded99ecf88b8a97senorblanco@chromium.org    { _M_ht.insert_equal(__f, __l); }
3410a5c233e3b911232c0d6f9a88ded99ecf88b8a97senorblanco@chromium.org  hash_multiset(const_iterator __f, const_iterator __l, size_type __n,
3420a5c233e3b911232c0d6f9a88ded99ecf88b8a97senorblanco@chromium.org                const hasher& __hf, const key_equal& __eql,
3430a5c233e3b911232c0d6f9a88ded99ecf88b8a97senorblanco@chromium.org                const allocator_type& __a = allocator_type())
3440a5c233e3b911232c0d6f9a88ded99ecf88b8a97senorblanco@chromium.org    : _M_ht(__n, __hf, __eql, __a)
3450a5c233e3b911232c0d6f9a88ded99ecf88b8a97senorblanco@chromium.org    { _M_ht.insert_equal(__f, __l); }
3460a5c233e3b911232c0d6f9a88ded99ecf88b8a97senorblanco@chromium.org#endif /*_STLP_MEMBER_TEMPLATES */
3470a5c233e3b911232c0d6f9a88ded99ecf88b8a97senorblanco@chromium.org
3480a5c233e3b911232c0d6f9a88ded99ecf88b8a97senorblanco@chromium.orgpublic:
3493bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org  size_type size() const { return _M_ht.size(); }
3503bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org  size_type max_size() const { return _M_ht.max_size(); }
3515ae5fc59b27a48711e514b3ede548b228e393e9bjoshualitt  bool empty() const { return _M_ht.empty(); }
352ac9779234ef7a8cf3d791ab7690ef8c388662836joshualitt  void swap(_Self& hs) { _M_ht.swap(hs._M_ht); }
3535ae5fc59b27a48711e514b3ede548b228e393e9bjoshualitt#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)
3545ae5fc59b27a48711e514b3ede548b228e393e9bjoshualitt  void _M_swap_workaround(_Self& __x) { swap(__x); }
3555ae5fc59b27a48711e514b3ede548b228e393e9bjoshualitt#endif
3565ae5fc59b27a48711e514b3ede548b228e393e9bjoshualitt
3575ae5fc59b27a48711e514b3ede548b228e393e9bjoshualitt  iterator begin() { return _M_ht.begin(); }
3585ae5fc59b27a48711e514b3ede548b228e393e9bjoshualitt  iterator end() { return _M_ht.end(); }
3595ae5fc59b27a48711e514b3ede548b228e393e9bjoshualitt  const_iterator begin() const { return _M_ht.begin(); }
3605ae5fc59b27a48711e514b3ede548b228e393e9bjoshualitt  const_iterator end() const { return _M_ht.end(); }
3615ae5fc59b27a48711e514b3ede548b228e393e9bjoshualitt
3625ae5fc59b27a48711e514b3ede548b228e393e9bjoshualittpublic:
3635ae5fc59b27a48711e514b3ede548b228e393e9bjoshualitt  iterator insert(const value_type& __obj) { return _M_ht.insert_equal(__obj); }
3643bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org#if defined (_STLP_MEMBER_TEMPLATES)
3653bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org  template <class _InputIterator>
366b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt  void insert(_InputIterator __f, _InputIterator __l)
367b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt  { _M_ht.insert_equal(__f,__l); }
368b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt#else
369b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt  void insert(const value_type* __f, const value_type* __l)
370b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt  { _M_ht.insert_equal(__f,__l); }
371d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org  void insert(const_iterator __f, const_iterator __l)
3723bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org  { _M_ht.insert_equal(__f, __l); }
373d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org#endif /*_STLP_MEMBER_TEMPLATES */
374b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt  iterator insert_noresize(const value_type& __obj)
375b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt  { return _M_ht.insert_equal_noresize(__obj); }
376b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt
377b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt  _STLP_TEMPLATE_FOR_CONT_EXT
378b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt  iterator find(const _KT& __key) { return _M_ht.find(__key); }
379b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt
380b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt  _STLP_TEMPLATE_FOR_CONT_EXT
381b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt  const_iterator find(const _KT& __key) const { return _M_ht.find(__key); }
382b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt
383d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org  _STLP_TEMPLATE_FOR_CONT_EXT
3843bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org  size_type count(const _KT& __key) const { return _M_ht.count(__key); }
3853bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org
386  _STLP_TEMPLATE_FOR_CONT_EXT
387  pair<iterator, iterator> equal_range(const _KT& __key)
388  { return _M_ht.equal_range(__key); }
389  _STLP_TEMPLATE_FOR_CONT_EXT
390  pair<const_iterator, const_iterator> equal_range(const _KT& __key) const
391  { return _M_ht.equal_range(__key); }
392
393  _STLP_TEMPLATE_FOR_CONT_EXT
394  size_type erase(const _KT& __key) {return _M_ht.erase(__key); }
395  void erase(iterator __it) { _M_ht.erase(__it); }
396  void erase(iterator __f, iterator __l) { _M_ht.erase(__f, __l); }
397  void clear() { _M_ht.clear(); }
398
399public:
400  void resize(size_type __hint) { _M_ht.resize(__hint); }
401  size_type bucket_count() const { return _M_ht.bucket_count(); }
402  size_type max_bucket_count() const { return _M_ht.max_bucket_count(); }
403  size_type elems_in_bucket(size_type __n) const
404  { return _M_ht.elems_in_bucket(__n); }
405};
406
407#define _STLP_TEMPLATE_HEADER template <class _Value, class _HashFcn, class _EqualKey, class _Alloc>
408#define _STLP_TEMPLATE_CONTAINER hash_set<_Value,_HashFcn,_EqualKey,_Alloc>
409
410#include <stl/_relops_hash_cont.h>
411
412#undef _STLP_TEMPLATE_CONTAINER
413#define _STLP_TEMPLATE_CONTAINER hash_multiset<_Value,_HashFcn,_EqualKey,_Alloc>
414#include <stl/_relops_hash_cont.h>
415
416#undef _STLP_TEMPLATE_CONTAINER
417#undef _STLP_TEMPLATE_HEADER
418
419// Specialization of insert_iterator so that it will work for hash_set
420// and hash_multiset.
421
422#if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
423#  if !defined (_STLP_NO_MOVE_SEMANTIC)
424template <class _Value, class _HashFcn, class _EqualKey, class _Alloc>
425struct __move_traits<hash_set<_Value, _HashFcn, _EqualKey, _Alloc> > :
426  _STLP_PRIV __move_traits_aux<typename hash_set<_Value, _HashFcn, _EqualKey, _Alloc>::_Ht>
427{};
428
429template <class _Value, class _HashFcn, class _EqualKey, class _Alloc>
430struct __move_traits<hash_multiset<_Value, _HashFcn, _EqualKey, _Alloc> > :
431  _STLP_PRIV __move_traits_aux<typename hash_multiset<_Value, _HashFcn, _EqualKey, _Alloc>::_Ht>
432{};
433#  endif
434
435template <class _Value, class _HashFcn, class _EqualKey, class _Alloc>
436class insert_iterator<hash_set<_Value, _HashFcn, _EqualKey, _Alloc> > {
437protected:
438  typedef hash_set<_Value, _HashFcn, _EqualKey, _Alloc> _Container;
439  _Container* container;
440public:
441  typedef _Container          container_type;
442  typedef output_iterator_tag iterator_category;
443  typedef void                value_type;
444  typedef void                difference_type;
445  typedef void                pointer;
446  typedef void                reference;
447
448  insert_iterator(_Container& __x) : container(&__x) {}
449  insert_iterator(_Container& __x, typename _Container::iterator)
450    : container(&__x) {}
451  insert_iterator<_Container>&
452  operator=(const typename _Container::value_type& __val) {
453    container->insert(__val);
454    return *this;
455  }
456  insert_iterator<_Container>& operator*() { return *this; }
457  insert_iterator<_Container>& operator++() { return *this; }
458  insert_iterator<_Container>& operator++(int) { return *this; }
459};
460
461template <class _Value, class _HashFcn, class _EqualKey, class _Alloc>
462class insert_iterator<hash_multiset<_Value, _HashFcn, _EqualKey, _Alloc> > {
463protected:
464  typedef hash_multiset<_Value, _HashFcn, _EqualKey, _Alloc> _Container;
465  _Container* container;
466  typename _Container::iterator iter;
467public:
468  typedef _Container          container_type;
469  typedef output_iterator_tag iterator_category;
470  typedef void                value_type;
471  typedef void                difference_type;
472  typedef void                pointer;
473  typedef void                reference;
474
475  insert_iterator(_Container& __x) : container(&__x) {}
476  insert_iterator(_Container& __x, typename _Container::iterator)
477    : container(&__x) {}
478  insert_iterator<_Container>&
479  operator=(const typename _Container::value_type& __val) {
480    container->insert(__val);
481    return *this;
482  }
483  insert_iterator<_Container>& operator*() { return *this; }
484  insert_iterator<_Container>& operator++() { return *this; }
485  insert_iterator<_Container>& operator++(int) { return *this; }
486};
487#endif /* _STLP_CLASS_PARTIAL_SPECIALIZATION */
488
489_STLP_END_NAMESPACE
490
491#endif /* _STLP_INTERNAL_HASH_SET_H */
492
493// Local Variables:
494// mode:C++
495// End:
496