1951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 2951a39d68df598db08dfced8b4707755864a0492Ying Wang * 3951a39d68df598db08dfced8b4707755864a0492Ying Wang * Copyright (c) 1994 4951a39d68df598db08dfced8b4707755864a0492Ying Wang * Hewlett-Packard Company 5951a39d68df598db08dfced8b4707755864a0492Ying Wang * 6951a39d68df598db08dfced8b4707755864a0492Ying Wang * Copyright (c) 1996,1997 7951a39d68df598db08dfced8b4707755864a0492Ying Wang * Silicon Graphics Computer Systems, Inc. 8951a39d68df598db08dfced8b4707755864a0492Ying Wang * 9951a39d68df598db08dfced8b4707755864a0492Ying Wang * Copyright (c) 1997 10951a39d68df598db08dfced8b4707755864a0492Ying Wang * Moscow Center for SPARC Technology 11951a39d68df598db08dfced8b4707755864a0492Ying Wang * 12951a39d68df598db08dfced8b4707755864a0492Ying Wang * Copyright (c) 1999 13951a39d68df598db08dfced8b4707755864a0492Ying Wang * Boris Fomitchev 14951a39d68df598db08dfced8b4707755864a0492Ying Wang * 15951a39d68df598db08dfced8b4707755864a0492Ying Wang * This material is provided "as is", with absolutely no warranty expressed 16951a39d68df598db08dfced8b4707755864a0492Ying Wang * or implied. Any use is at your own risk. 17951a39d68df598db08dfced8b4707755864a0492Ying Wang * 18951a39d68df598db08dfced8b4707755864a0492Ying Wang * Permission to use or copy this software for any purpose is hereby granted 19951a39d68df598db08dfced8b4707755864a0492Ying Wang * without fee, provided the above notices are retained on all copies. 20951a39d68df598db08dfced8b4707755864a0492Ying Wang * Permission to modify the code and to distribute modified code is granted, 21951a39d68df598db08dfced8b4707755864a0492Ying Wang * provided the above notices are retained, and a notice that the code was 22951a39d68df598db08dfced8b4707755864a0492Ying Wang * modified is included with the above copyright notice. 23951a39d68df598db08dfced8b4707755864a0492Ying Wang * 24951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 25951a39d68df598db08dfced8b4707755864a0492Ying Wang 26951a39d68df598db08dfced8b4707755864a0492Ying Wang/* NOTE: This is an internal header file, included by other STL headers. 27951a39d68df598db08dfced8b4707755864a0492Ying Wang * You should not attempt to use it directly. 28951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 29951a39d68df598db08dfced8b4707755864a0492Ying Wang 30951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _STLP_INTERNAL_HASH_SET_H 31951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _STLP_INTERNAL_HASH_SET_H 32951a39d68df598db08dfced8b4707755864a0492Ying Wang 33951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _STLP_INTERNAL_HASHTABLE_H 34951a39d68df598db08dfced8b4707755864a0492Ying Wang# include <stl/_hashtable.h> 35951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 36951a39d68df598db08dfced8b4707755864a0492Ying Wang 37951a39d68df598db08dfced8b4707755864a0492Ying Wang_STLP_BEGIN_NAMESPACE 38951a39d68df598db08dfced8b4707755864a0492Ying Wang 39951a39d68df598db08dfced8b4707755864a0492Ying Wang//Specific iterator traits creation 40951a39d68df598db08dfced8b4707755864a0492Ying Wang_STLP_CREATE_HASH_ITERATOR_TRAITS(HashSetTraitsT, Const_traits) 41951a39d68df598db08dfced8b4707755864a0492Ying Wang 42951a39d68df598db08dfced8b4707755864a0492Ying Wangtemplate <class _Value, _STLP_DFL_TMPL_PARAM(_HashFcn,hash<_Value>), 43951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DFL_TMPL_PARAM(_EqualKey, equal_to<_Value>), 44951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DFL_TMPL_PARAM(_Alloc, allocator<_Value>) > 45951a39d68df598db08dfced8b4707755864a0492Ying Wangclass hash_set 46951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) 47951a39d68df598db08dfced8b4707755864a0492Ying Wang : public __stlport_class<hash_set<_Value, _HashFcn, _EqualKey, _Alloc> > 48951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 49951a39d68df598db08dfced8b4707755864a0492Ying Wang{ 50951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef hash_set<_Value, _HashFcn, _EqualKey, _Alloc> _Self; 51951a39d68df598db08dfced8b4707755864a0492Ying Wang //Specific iterator traits creation 52951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef _STLP_PRIV _HashSetTraitsT<_Value> _HashSetTraits; 53951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic: 54951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef hashtable<_Value, _Value, _HashFcn, 55951a39d68df598db08dfced8b4707755864a0492Ying Wang _HashSetTraits, _STLP_PRIV _Identity<_Value>, _EqualKey, _Alloc> _Ht; 56951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic: 57951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::key_type key_type; 58951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::value_type value_type; 59951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::hasher hasher; 60951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::key_equal key_equal; 61951a39d68df598db08dfced8b4707755864a0492Ying Wang 62951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::size_type size_type; 63951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::difference_type difference_type; 64951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::pointer pointer; 65951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::const_pointer const_pointer; 66951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::reference reference; 67951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::const_reference const_reference; 68951a39d68df598db08dfced8b4707755864a0492Ying Wang 69951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::iterator iterator; 70951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::const_iterator const_iterator; 71951a39d68df598db08dfced8b4707755864a0492Ying Wang 72951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::allocator_type allocator_type; 73951a39d68df598db08dfced8b4707755864a0492Ying Wang 74951a39d68df598db08dfced8b4707755864a0492Ying Wang hasher hash_funct() const { return _M_ht.hash_funct(); } 75951a39d68df598db08dfced8b4707755864a0492Ying Wang key_equal key_eq() const { return _M_ht.key_eq(); } 76951a39d68df598db08dfced8b4707755864a0492Ying Wang allocator_type get_allocator() const { return _M_ht.get_allocator(); } 77951a39d68df598db08dfced8b4707755864a0492Ying Wang 78951a39d68df598db08dfced8b4707755864a0492Ying Wangprivate: 79951a39d68df598db08dfced8b4707755864a0492Ying Wang _Ht _M_ht; 80951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_KEY_TYPE_FOR_CONT_EXT(key_type) 81951a39d68df598db08dfced8b4707755864a0492Ying Wang 82951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic: 83951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_set() 84951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(0, hasher(), key_equal(), allocator_type()) {} 85951a39d68df598db08dfced8b4707755864a0492Ying Wang explicit hash_set(size_type __n) 86951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, hasher(), key_equal(), allocator_type()) {} 87951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_set(size_type __n, const hasher& __hf) 88951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, key_equal(), allocator_type()) {} 89951a39d68df598db08dfced8b4707755864a0492Ying Wang#if !defined (_STLP_DONT_SUP_DFLT_PARAM) 90951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_set(size_type __n, const hasher& __hf, const key_equal& __eql, 91951a39d68df598db08dfced8b4707755864a0492Ying Wang const allocator_type& __a = allocator_type()) 92951a39d68df598db08dfced8b4707755864a0492Ying Wang#else 93951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_set(size_type __n, const hasher& __hf, const key_equal& __eql) 94951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, __eql, allocator_type()) {} 95951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_set(size_type __n, const hasher& __hf, const key_equal& __eql, 96951a39d68df598db08dfced8b4707755864a0492Ying Wang const allocator_type& __a) 97951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 98951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, __eql, __a) {} 99951a39d68df598db08dfced8b4707755864a0492Ying Wang 100951a39d68df598db08dfced8b4707755864a0492Ying Wang#if !defined (_STLP_NO_MOVE_SEMANTIC) 101951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_set(__move_source<_Self> src) 102951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__move_source<_Ht>(src.get()._M_ht)) {} 103951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 104951a39d68df598db08dfced8b4707755864a0492Ying Wang 105951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined (_STLP_MEMBER_TEMPLATES) 106951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _InputIterator> 107951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_set(_InputIterator __f, _InputIterator __l) 108951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(0, hasher(), key_equal(), allocator_type()) 109951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_unique(__f, __l); } 110951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _InputIterator> 111951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_set(_InputIterator __f, _InputIterator __l, size_type __n) 112951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, hasher(), key_equal(), allocator_type()) 113951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_unique(__f, __l); } 114951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _InputIterator> 115951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_set(_InputIterator __f, _InputIterator __l, size_type __n, 116951a39d68df598db08dfced8b4707755864a0492Ying Wang const hasher& __hf) 117951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, key_equal(), allocator_type()) 118951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_unique(__f, __l); } 119951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _InputIterator> 120951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_set(_InputIterator __f, _InputIterator __l, size_type __n, 121951a39d68df598db08dfced8b4707755864a0492Ying Wang const hasher& __hf, const key_equal& __eql, 122951a39d68df598db08dfced8b4707755864a0492Ying Wang const allocator_type& __a _STLP_ALLOCATOR_TYPE_DFL) 123951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, __eql, __a) 124951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_unique(__f, __l); } 125951a39d68df598db08dfced8b4707755864a0492Ying Wang# if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS) 126951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _InputIterator> 127951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_set(_InputIterator __f, _InputIterator __l, size_type __n, 128951a39d68df598db08dfced8b4707755864a0492Ying Wang const hasher& __hf, const key_equal& __eql) 129951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, __eql, allocator_type()) 130951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_unique(__f, __l); } 131951a39d68df598db08dfced8b4707755864a0492Ying Wang# endif 132951a39d68df598db08dfced8b4707755864a0492Ying Wang#else 133951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_set(const value_type* __f, const value_type* __l) 134951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(0, hasher(), key_equal(), allocator_type()) 135951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_unique(__f, __l); } 136951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_set(const value_type* __f, const value_type* __l, size_type __n) 137951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, hasher(), key_equal(), allocator_type()) 138951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_unique(__f, __l); } 139951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_set(const value_type* __f, const value_type* __l, size_type __n, 140951a39d68df598db08dfced8b4707755864a0492Ying Wang const hasher& __hf) 141951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, key_equal(), allocator_type()) 142951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_unique(__f, __l); } 143951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_set(const value_type* __f, const value_type* __l, size_type __n, 144951a39d68df598db08dfced8b4707755864a0492Ying Wang const hasher& __hf, const key_equal& __eql, 145951a39d68df598db08dfced8b4707755864a0492Ying Wang const allocator_type& __a = allocator_type()) 146951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, __eql, __a) 147951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_unique(__f, __l); } 148951a39d68df598db08dfced8b4707755864a0492Ying Wang 149951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_set(const_iterator __f, const_iterator __l) 150951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(0, hasher(), key_equal(), allocator_type()) 151951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_unique(__f, __l); } 152951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_set(const_iterator __f, const_iterator __l, size_type __n) 153951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, hasher(), key_equal(), allocator_type()) 154951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_unique(__f, __l); } 155951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_set(const_iterator __f, const_iterator __l, size_type __n, 156951a39d68df598db08dfced8b4707755864a0492Ying Wang const hasher& __hf) 157951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, key_equal(), allocator_type()) 158951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_unique(__f, __l); } 159951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_set(const_iterator __f, const_iterator __l, size_type __n, 160951a39d68df598db08dfced8b4707755864a0492Ying Wang const hasher& __hf, const key_equal& __eql, 161951a39d68df598db08dfced8b4707755864a0492Ying Wang const allocator_type& __a = allocator_type()) 162951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, __eql, __a) 163951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_unique(__f, __l); } 164951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif /*_STLP_MEMBER_TEMPLATES */ 165951a39d68df598db08dfced8b4707755864a0492Ying Wang 166951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic: 167951a39d68df598db08dfced8b4707755864a0492Ying Wang size_type size() const { return _M_ht.size(); } 168951a39d68df598db08dfced8b4707755864a0492Ying Wang size_type max_size() const { return _M_ht.max_size(); } 169951a39d68df598db08dfced8b4707755864a0492Ying Wang bool empty() const { return _M_ht.empty(); } 170951a39d68df598db08dfced8b4707755864a0492Ying Wang void swap(_Self& __hs) { _M_ht.swap(__hs._M_ht); } 171951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 172951a39d68df598db08dfced8b4707755864a0492Ying Wang void _M_swap_workaround(_Self& __x) { swap(__x); } 173951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 174951a39d68df598db08dfced8b4707755864a0492Ying Wang 175951a39d68df598db08dfced8b4707755864a0492Ying Wang iterator begin() { return _M_ht.begin(); } 176951a39d68df598db08dfced8b4707755864a0492Ying Wang iterator end() { return _M_ht.end(); } 177951a39d68df598db08dfced8b4707755864a0492Ying Wang const_iterator begin() const { return _M_ht.begin(); } 178951a39d68df598db08dfced8b4707755864a0492Ying Wang const_iterator end() const { return _M_ht.end(); } 179951a39d68df598db08dfced8b4707755864a0492Ying Wang 180951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic: 181951a39d68df598db08dfced8b4707755864a0492Ying Wang pair<iterator, bool> insert(const value_type& __obj) 182951a39d68df598db08dfced8b4707755864a0492Ying Wang { return _M_ht.insert_unique(__obj); } 183951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined (_STLP_MEMBER_TEMPLATES) 184951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _InputIterator> 185951a39d68df598db08dfced8b4707755864a0492Ying Wang void insert(_InputIterator __f, _InputIterator __l) 186951a39d68df598db08dfced8b4707755864a0492Ying Wang#else 187951a39d68df598db08dfced8b4707755864a0492Ying Wang void insert(const_iterator __f, const_iterator __l) 188951a39d68df598db08dfced8b4707755864a0492Ying Wang {_M_ht.insert_unique(__f, __l); } 189951a39d68df598db08dfced8b4707755864a0492Ying Wang void insert(const value_type* __f, const value_type* __l) 190951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 191951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_unique(__f,__l); } 192951a39d68df598db08dfced8b4707755864a0492Ying Wang 193951a39d68df598db08dfced8b4707755864a0492Ying Wang pair<iterator, bool> insert_noresize(const value_type& __obj) 194951a39d68df598db08dfced8b4707755864a0492Ying Wang { return _M_ht.insert_unique_noresize(__obj); } 195951a39d68df598db08dfced8b4707755864a0492Ying Wang 196951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_TEMPLATE_FOR_CONT_EXT 197951a39d68df598db08dfced8b4707755864a0492Ying Wang iterator find(const _KT& __key) { return _M_ht.find(__key); } 198951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_TEMPLATE_FOR_CONT_EXT 199951a39d68df598db08dfced8b4707755864a0492Ying Wang const_iterator find(const _KT& __key) const { return _M_ht.find(__key); } 200951a39d68df598db08dfced8b4707755864a0492Ying Wang 201951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_TEMPLATE_FOR_CONT_EXT 202951a39d68df598db08dfced8b4707755864a0492Ying Wang size_type count(const _KT& __key) const { return _M_ht.count(__key); } 203951a39d68df598db08dfced8b4707755864a0492Ying Wang 204951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_TEMPLATE_FOR_CONT_EXT 205951a39d68df598db08dfced8b4707755864a0492Ying Wang pair<iterator, iterator> equal_range(const _KT& __key) 206951a39d68df598db08dfced8b4707755864a0492Ying Wang { return _M_ht.equal_range(__key); } 207951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_TEMPLATE_FOR_CONT_EXT 208951a39d68df598db08dfced8b4707755864a0492Ying Wang pair<const_iterator, const_iterator> equal_range(const _KT& __key) const 209951a39d68df598db08dfced8b4707755864a0492Ying Wang { return _M_ht.equal_range(__key); } 210951a39d68df598db08dfced8b4707755864a0492Ying Wang 211951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_TEMPLATE_FOR_CONT_EXT 212951a39d68df598db08dfced8b4707755864a0492Ying Wang size_type erase(const _KT& __key) {return _M_ht.erase(__key); } 213951a39d68df598db08dfced8b4707755864a0492Ying Wang void erase(iterator __it) { _M_ht.erase(__it); } 214951a39d68df598db08dfced8b4707755864a0492Ying Wang void erase(iterator __f, iterator __l) { _M_ht.erase(__f, __l); } 215951a39d68df598db08dfced8b4707755864a0492Ying Wang void clear() { _M_ht.clear(); } 216951a39d68df598db08dfced8b4707755864a0492Ying Wang 217951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic: 218951a39d68df598db08dfced8b4707755864a0492Ying Wang void resize(size_type __hint) { _M_ht.resize(__hint); } 219951a39d68df598db08dfced8b4707755864a0492Ying Wang size_type bucket_count() const { return _M_ht.bucket_count(); } 220951a39d68df598db08dfced8b4707755864a0492Ying Wang size_type max_bucket_count() const { return _M_ht.max_bucket_count(); } 221951a39d68df598db08dfced8b4707755864a0492Ying Wang size_type elems_in_bucket(size_type __n) const 222951a39d68df598db08dfced8b4707755864a0492Ying Wang { return _M_ht.elems_in_bucket(__n); } 223951a39d68df598db08dfced8b4707755864a0492Ying Wang}; 224951a39d68df598db08dfced8b4707755864a0492Ying Wang 225951a39d68df598db08dfced8b4707755864a0492Ying Wang//Specific iterator traits creation 226951a39d68df598db08dfced8b4707755864a0492Ying Wang_STLP_CREATE_HASH_ITERATOR_TRAITS(HashMultisetTraitsT, Const_traits) 227951a39d68df598db08dfced8b4707755864a0492Ying Wang 228951a39d68df598db08dfced8b4707755864a0492Ying Wangtemplate <class _Value, _STLP_DFL_TMPL_PARAM(_HashFcn,hash<_Value>), 229951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DFL_TMPL_PARAM(_EqualKey, equal_to<_Value>), 230951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DFL_TMPL_PARAM(_Alloc, allocator<_Value>) > 231951a39d68df598db08dfced8b4707755864a0492Ying Wangclass hash_multiset 232951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) 233951a39d68df598db08dfced8b4707755864a0492Ying Wang : public __stlport_class<hash_multiset<_Value, _HashFcn, _EqualKey, _Alloc> > 234951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 235951a39d68df598db08dfced8b4707755864a0492Ying Wang{ 236951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef hash_multiset<_Value, _HashFcn, _EqualKey, _Alloc> _Self; 237951a39d68df598db08dfced8b4707755864a0492Ying Wang //Specific iterator traits creation 238951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef _STLP_PRIV _HashMultisetTraitsT<_Value> _HashMultisetTraits; 239951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic: 240951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef hashtable<_Value, _Value, _HashFcn, 241951a39d68df598db08dfced8b4707755864a0492Ying Wang _HashMultisetTraits, _STLP_PRIV _Identity<_Value>, _EqualKey, _Alloc> _Ht; 242951a39d68df598db08dfced8b4707755864a0492Ying Wang 243951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::key_type key_type; 244951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::value_type value_type; 245951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::hasher hasher; 246951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::key_equal key_equal; 247951a39d68df598db08dfced8b4707755864a0492Ying Wang 248951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::size_type size_type; 249951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::difference_type difference_type; 250951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::pointer pointer; 251951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::const_pointer const_pointer; 252951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::reference reference; 253951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::const_reference const_reference; 254951a39d68df598db08dfced8b4707755864a0492Ying Wang 255951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::iterator iterator; 256951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::const_iterator const_iterator; 257951a39d68df598db08dfced8b4707755864a0492Ying Wang 258951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Ht::allocator_type allocator_type; 259951a39d68df598db08dfced8b4707755864a0492Ying Wang 260951a39d68df598db08dfced8b4707755864a0492Ying Wang hasher hash_funct() const { return _M_ht.hash_funct(); } 261951a39d68df598db08dfced8b4707755864a0492Ying Wang key_equal key_eq() const { return _M_ht.key_eq(); } 262951a39d68df598db08dfced8b4707755864a0492Ying Wang allocator_type get_allocator() const { return _M_ht.get_allocator(); } 263951a39d68df598db08dfced8b4707755864a0492Ying Wang 264951a39d68df598db08dfced8b4707755864a0492Ying Wangprivate: 265951a39d68df598db08dfced8b4707755864a0492Ying Wang _Ht _M_ht; 266951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_KEY_TYPE_FOR_CONT_EXT(key_type) 267951a39d68df598db08dfced8b4707755864a0492Ying Wang 268951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic: 269951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_multiset() 270951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(0, hasher(), key_equal(), allocator_type()) {} 271951a39d68df598db08dfced8b4707755864a0492Ying Wang explicit hash_multiset(size_type __n) 272951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, hasher(), key_equal(), allocator_type()) {} 273951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_multiset(size_type __n, const hasher& __hf) 274951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, key_equal(), allocator_type()) {} 275951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_multiset(size_type __n, const hasher& __hf, const key_equal& __eql) 276951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, __eql, allocator_type()) {} 277951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_multiset(size_type __n, const hasher& __hf, const key_equal& __eql, 278951a39d68df598db08dfced8b4707755864a0492Ying Wang const allocator_type& __a) 279951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, __eql, __a) {} 280951a39d68df598db08dfced8b4707755864a0492Ying Wang 281951a39d68df598db08dfced8b4707755864a0492Ying Wang#if !defined (_STLP_NO_MOVE_SEMANTIC) 282951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_multiset(__move_source<_Self> src) 283951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__move_source<_Ht>(src.get()._M_ht)) {} 284951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 285951a39d68df598db08dfced8b4707755864a0492Ying Wang 286951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined (_STLP_MEMBER_TEMPLATES) 287951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _InputIterator> 288951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_multiset(_InputIterator __f, _InputIterator __l) 289951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(0, hasher(), key_equal(), allocator_type()) 290951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_equal(__f, __l); } 291951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _InputIterator> 292951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_multiset(_InputIterator __f, _InputIterator __l, size_type __n) 293951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, hasher(), key_equal(), allocator_type()) 294951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_equal(__f, __l); } 295951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _InputIterator> 296951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_multiset(_InputIterator __f, _InputIterator __l, size_type __n, 297951a39d68df598db08dfced8b4707755864a0492Ying Wang const hasher& __hf) 298951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, key_equal(), allocator_type()) 299951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_equal(__f, __l); } 300951a39d68df598db08dfced8b4707755864a0492Ying Wang 301951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _InputIterator> 302951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_multiset(_InputIterator __f, _InputIterator __l, size_type __n, 303951a39d68df598db08dfced8b4707755864a0492Ying Wang const hasher& __hf, const key_equal& __eql, 304951a39d68df598db08dfced8b4707755864a0492Ying Wang const allocator_type& __a _STLP_ALLOCATOR_TYPE_DFL) 305951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, __eql, __a) 306951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_equal(__f, __l); } 307951a39d68df598db08dfced8b4707755864a0492Ying Wang# if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS) 308951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _InputIterator> 309951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_multiset(_InputIterator __f, _InputIterator __l, size_type __n, 310951a39d68df598db08dfced8b4707755864a0492Ying Wang const hasher& __hf, const key_equal& __eql) 311951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, __eql, allocator_type()) 312951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_equal(__f, __l); } 313951a39d68df598db08dfced8b4707755864a0492Ying Wang# endif 314951a39d68df598db08dfced8b4707755864a0492Ying Wang#else 315951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_multiset(const value_type* __f, const value_type* __l) 316951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(0, hasher(), key_equal(), allocator_type()) 317951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_equal(__f, __l); } 318951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_multiset(const value_type* __f, const value_type* __l, size_type __n) 319951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, hasher(), key_equal(), allocator_type()) 320951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_equal(__f, __l); } 321951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_multiset(const value_type* __f, const value_type* __l, size_type __n, 322951a39d68df598db08dfced8b4707755864a0492Ying Wang const hasher& __hf) 323951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, key_equal(), allocator_type()) 324951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_equal(__f, __l); } 325951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_multiset(const value_type* __f, const value_type* __l, size_type __n, 326951a39d68df598db08dfced8b4707755864a0492Ying Wang const hasher& __hf, const key_equal& __eql, 327951a39d68df598db08dfced8b4707755864a0492Ying Wang const allocator_type& __a = allocator_type()) 328951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, __eql, __a) 329951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_equal(__f, __l); } 330951a39d68df598db08dfced8b4707755864a0492Ying Wang 331951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_multiset(const_iterator __f, const_iterator __l) 332951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(0, hasher(), key_equal(), allocator_type()) 333951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_equal(__f, __l); } 334951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_multiset(const_iterator __f, const_iterator __l, size_type __n) 335951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, hasher(), key_equal(), allocator_type()) 336951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_equal(__f, __l); } 337951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_multiset(const_iterator __f, const_iterator __l, size_type __n, 338951a39d68df598db08dfced8b4707755864a0492Ying Wang const hasher& __hf) 339951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, key_equal(), allocator_type()) 340951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_equal(__f, __l); } 341951a39d68df598db08dfced8b4707755864a0492Ying Wang hash_multiset(const_iterator __f, const_iterator __l, size_type __n, 342951a39d68df598db08dfced8b4707755864a0492Ying Wang const hasher& __hf, const key_equal& __eql, 343951a39d68df598db08dfced8b4707755864a0492Ying Wang const allocator_type& __a = allocator_type()) 344951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_ht(__n, __hf, __eql, __a) 345951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_equal(__f, __l); } 346951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif /*_STLP_MEMBER_TEMPLATES */ 347951a39d68df598db08dfced8b4707755864a0492Ying Wang 348951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic: 349951a39d68df598db08dfced8b4707755864a0492Ying Wang size_type size() const { return _M_ht.size(); } 350951a39d68df598db08dfced8b4707755864a0492Ying Wang size_type max_size() const { return _M_ht.max_size(); } 351951a39d68df598db08dfced8b4707755864a0492Ying Wang bool empty() const { return _M_ht.empty(); } 352951a39d68df598db08dfced8b4707755864a0492Ying Wang void swap(_Self& hs) { _M_ht.swap(hs._M_ht); } 353951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 354951a39d68df598db08dfced8b4707755864a0492Ying Wang void _M_swap_workaround(_Self& __x) { swap(__x); } 355951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 356951a39d68df598db08dfced8b4707755864a0492Ying Wang 357951a39d68df598db08dfced8b4707755864a0492Ying Wang iterator begin() { return _M_ht.begin(); } 358951a39d68df598db08dfced8b4707755864a0492Ying Wang iterator end() { return _M_ht.end(); } 359951a39d68df598db08dfced8b4707755864a0492Ying Wang const_iterator begin() const { return _M_ht.begin(); } 360951a39d68df598db08dfced8b4707755864a0492Ying Wang const_iterator end() const { return _M_ht.end(); } 361951a39d68df598db08dfced8b4707755864a0492Ying Wang 362951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic: 363951a39d68df598db08dfced8b4707755864a0492Ying Wang iterator insert(const value_type& __obj) { return _M_ht.insert_equal(__obj); } 364951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined (_STLP_MEMBER_TEMPLATES) 365951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _InputIterator> 366951a39d68df598db08dfced8b4707755864a0492Ying Wang void insert(_InputIterator __f, _InputIterator __l) 367951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_equal(__f,__l); } 368951a39d68df598db08dfced8b4707755864a0492Ying Wang#else 369951a39d68df598db08dfced8b4707755864a0492Ying Wang void insert(const value_type* __f, const value_type* __l) 370951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_equal(__f,__l); } 371951a39d68df598db08dfced8b4707755864a0492Ying Wang void insert(const_iterator __f, const_iterator __l) 372951a39d68df598db08dfced8b4707755864a0492Ying Wang { _M_ht.insert_equal(__f, __l); } 373951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif /*_STLP_MEMBER_TEMPLATES */ 374951a39d68df598db08dfced8b4707755864a0492Ying Wang iterator insert_noresize(const value_type& __obj) 375951a39d68df598db08dfced8b4707755864a0492Ying Wang { return _M_ht.insert_equal_noresize(__obj); } 376951a39d68df598db08dfced8b4707755864a0492Ying Wang 377951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_TEMPLATE_FOR_CONT_EXT 378951a39d68df598db08dfced8b4707755864a0492Ying Wang iterator find(const _KT& __key) { return _M_ht.find(__key); } 379951a39d68df598db08dfced8b4707755864a0492Ying Wang 380951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_TEMPLATE_FOR_CONT_EXT 381951a39d68df598db08dfced8b4707755864a0492Ying Wang const_iterator find(const _KT& __key) const { return _M_ht.find(__key); } 382951a39d68df598db08dfced8b4707755864a0492Ying Wang 383951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_TEMPLATE_FOR_CONT_EXT 384951a39d68df598db08dfced8b4707755864a0492Ying Wang size_type count(const _KT& __key) const { return _M_ht.count(__key); } 385951a39d68df598db08dfced8b4707755864a0492Ying Wang 386951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_TEMPLATE_FOR_CONT_EXT 387951a39d68df598db08dfced8b4707755864a0492Ying Wang pair<iterator, iterator> equal_range(const _KT& __key) 388951a39d68df598db08dfced8b4707755864a0492Ying Wang { return _M_ht.equal_range(__key); } 389951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_TEMPLATE_FOR_CONT_EXT 390951a39d68df598db08dfced8b4707755864a0492Ying Wang pair<const_iterator, const_iterator> equal_range(const _KT& __key) const 391951a39d68df598db08dfced8b4707755864a0492Ying Wang { return _M_ht.equal_range(__key); } 392951a39d68df598db08dfced8b4707755864a0492Ying Wang 393951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_TEMPLATE_FOR_CONT_EXT 394951a39d68df598db08dfced8b4707755864a0492Ying Wang size_type erase(const _KT& __key) {return _M_ht.erase(__key); } 395951a39d68df598db08dfced8b4707755864a0492Ying Wang void erase(iterator __it) { _M_ht.erase(__it); } 396951a39d68df598db08dfced8b4707755864a0492Ying Wang void erase(iterator __f, iterator __l) { _M_ht.erase(__f, __l); } 397951a39d68df598db08dfced8b4707755864a0492Ying Wang void clear() { _M_ht.clear(); } 398951a39d68df598db08dfced8b4707755864a0492Ying Wang 399951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic: 400951a39d68df598db08dfced8b4707755864a0492Ying Wang void resize(size_type __hint) { _M_ht.resize(__hint); } 401951a39d68df598db08dfced8b4707755864a0492Ying Wang size_type bucket_count() const { return _M_ht.bucket_count(); } 402951a39d68df598db08dfced8b4707755864a0492Ying Wang size_type max_bucket_count() const { return _M_ht.max_bucket_count(); } 403951a39d68df598db08dfced8b4707755864a0492Ying Wang size_type elems_in_bucket(size_type __n) const 404951a39d68df598db08dfced8b4707755864a0492Ying Wang { return _M_ht.elems_in_bucket(__n); } 405951a39d68df598db08dfced8b4707755864a0492Ying Wang}; 406951a39d68df598db08dfced8b4707755864a0492Ying Wang 407951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _STLP_TEMPLATE_HEADER template <class _Value, class _HashFcn, class _EqualKey, class _Alloc> 408951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _STLP_TEMPLATE_CONTAINER hash_set<_Value,_HashFcn,_EqualKey,_Alloc> 409951a39d68df598db08dfced8b4707755864a0492Ying Wang 410951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <stl/_relops_hash_cont.h> 411951a39d68df598db08dfced8b4707755864a0492Ying Wang 412951a39d68df598db08dfced8b4707755864a0492Ying Wang#undef _STLP_TEMPLATE_CONTAINER 413951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _STLP_TEMPLATE_CONTAINER hash_multiset<_Value,_HashFcn,_EqualKey,_Alloc> 414951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <stl/_relops_hash_cont.h> 415951a39d68df598db08dfced8b4707755864a0492Ying Wang 416951a39d68df598db08dfced8b4707755864a0492Ying Wang#undef _STLP_TEMPLATE_CONTAINER 417951a39d68df598db08dfced8b4707755864a0492Ying Wang#undef _STLP_TEMPLATE_HEADER 418951a39d68df598db08dfced8b4707755864a0492Ying Wang 419951a39d68df598db08dfced8b4707755864a0492Ying Wang// Specialization of insert_iterator so that it will work for hash_set 420951a39d68df598db08dfced8b4707755864a0492Ying Wang// and hash_multiset. 421951a39d68df598db08dfced8b4707755864a0492Ying Wang 422951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 423951a39d68df598db08dfced8b4707755864a0492Ying Wang# if !defined (_STLP_NO_MOVE_SEMANTIC) 424951a39d68df598db08dfced8b4707755864a0492Ying Wangtemplate <class _Value, class _HashFcn, class _EqualKey, class _Alloc> 425951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct __move_traits<hash_set<_Value, _HashFcn, _EqualKey, _Alloc> > : 426951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_PRIV __move_traits_aux<typename hash_set<_Value, _HashFcn, _EqualKey, _Alloc>::_Ht> 427951a39d68df598db08dfced8b4707755864a0492Ying Wang{}; 428951a39d68df598db08dfced8b4707755864a0492Ying Wang 429951a39d68df598db08dfced8b4707755864a0492Ying Wangtemplate <class _Value, class _HashFcn, class _EqualKey, class _Alloc> 430951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct __move_traits<hash_multiset<_Value, _HashFcn, _EqualKey, _Alloc> > : 431951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_PRIV __move_traits_aux<typename hash_multiset<_Value, _HashFcn, _EqualKey, _Alloc>::_Ht> 432951a39d68df598db08dfced8b4707755864a0492Ying Wang{}; 433951a39d68df598db08dfced8b4707755864a0492Ying Wang# endif 434951a39d68df598db08dfced8b4707755864a0492Ying Wang 435951a39d68df598db08dfced8b4707755864a0492Ying Wangtemplate <class _Value, class _HashFcn, class _EqualKey, class _Alloc> 436951a39d68df598db08dfced8b4707755864a0492Ying Wangclass insert_iterator<hash_set<_Value, _HashFcn, _EqualKey, _Alloc> > { 437951a39d68df598db08dfced8b4707755864a0492Ying Wangprotected: 438951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef hash_set<_Value, _HashFcn, _EqualKey, _Alloc> _Container; 439951a39d68df598db08dfced8b4707755864a0492Ying Wang _Container* container; 440951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic: 441951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef _Container container_type; 442951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef output_iterator_tag iterator_category; 443951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef void value_type; 444951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef void difference_type; 445951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef void pointer; 446951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef void reference; 447951a39d68df598db08dfced8b4707755864a0492Ying Wang 448951a39d68df598db08dfced8b4707755864a0492Ying Wang insert_iterator(_Container& __x) : container(&__x) {} 449951a39d68df598db08dfced8b4707755864a0492Ying Wang insert_iterator(_Container& __x, typename _Container::iterator) 450951a39d68df598db08dfced8b4707755864a0492Ying Wang : container(&__x) {} 451951a39d68df598db08dfced8b4707755864a0492Ying Wang insert_iterator<_Container>& 452951a39d68df598db08dfced8b4707755864a0492Ying Wang operator=(const typename _Container::value_type& __val) { 453951a39d68df598db08dfced8b4707755864a0492Ying Wang container->insert(__val); 454951a39d68df598db08dfced8b4707755864a0492Ying Wang return *this; 455951a39d68df598db08dfced8b4707755864a0492Ying Wang } 456951a39d68df598db08dfced8b4707755864a0492Ying Wang insert_iterator<_Container>& operator*() { return *this; } 457951a39d68df598db08dfced8b4707755864a0492Ying Wang insert_iterator<_Container>& operator++() { return *this; } 458951a39d68df598db08dfced8b4707755864a0492Ying Wang insert_iterator<_Container>& operator++(int) { return *this; } 459951a39d68df598db08dfced8b4707755864a0492Ying Wang}; 460951a39d68df598db08dfced8b4707755864a0492Ying Wang 461951a39d68df598db08dfced8b4707755864a0492Ying Wangtemplate <class _Value, class _HashFcn, class _EqualKey, class _Alloc> 462951a39d68df598db08dfced8b4707755864a0492Ying Wangclass insert_iterator<hash_multiset<_Value, _HashFcn, _EqualKey, _Alloc> > { 463951a39d68df598db08dfced8b4707755864a0492Ying Wangprotected: 464951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef hash_multiset<_Value, _HashFcn, _EqualKey, _Alloc> _Container; 465951a39d68df598db08dfced8b4707755864a0492Ying Wang _Container* container; 466951a39d68df598db08dfced8b4707755864a0492Ying Wang typename _Container::iterator iter; 467951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic: 468951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef _Container container_type; 469951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef output_iterator_tag iterator_category; 470951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef void value_type; 471951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef void difference_type; 472951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef void pointer; 473951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef void reference; 474951a39d68df598db08dfced8b4707755864a0492Ying Wang 475951a39d68df598db08dfced8b4707755864a0492Ying Wang insert_iterator(_Container& __x) : container(&__x) {} 476951a39d68df598db08dfced8b4707755864a0492Ying Wang insert_iterator(_Container& __x, typename _Container::iterator) 477951a39d68df598db08dfced8b4707755864a0492Ying Wang : container(&__x) {} 478951a39d68df598db08dfced8b4707755864a0492Ying Wang insert_iterator<_Container>& 479951a39d68df598db08dfced8b4707755864a0492Ying Wang operator=(const typename _Container::value_type& __val) { 480951a39d68df598db08dfced8b4707755864a0492Ying Wang container->insert(__val); 481951a39d68df598db08dfced8b4707755864a0492Ying Wang return *this; 482951a39d68df598db08dfced8b4707755864a0492Ying Wang } 483951a39d68df598db08dfced8b4707755864a0492Ying Wang insert_iterator<_Container>& operator*() { return *this; } 484951a39d68df598db08dfced8b4707755864a0492Ying Wang insert_iterator<_Container>& operator++() { return *this; } 485951a39d68df598db08dfced8b4707755864a0492Ying Wang insert_iterator<_Container>& operator++(int) { return *this; } 486951a39d68df598db08dfced8b4707755864a0492Ying Wang}; 487951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif /* _STLP_CLASS_PARTIAL_SPECIALIZATION */ 488951a39d68df598db08dfced8b4707755864a0492Ying Wang 489951a39d68df598db08dfced8b4707755864a0492Ying Wang_STLP_END_NAMESPACE 490951a39d68df598db08dfced8b4707755864a0492Ying Wang 491951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif /* _STLP_INTERNAL_HASH_SET_H */ 492951a39d68df598db08dfced8b4707755864a0492Ying Wang 493951a39d68df598db08dfced8b4707755864a0492Ying Wang// Local Variables: 494951a39d68df598db08dfced8b4707755864a0492Ying Wang// mode:C++ 495951a39d68df598db08dfced8b4707755864a0492Ying Wang// End: 496