111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 2004 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Francois Dumont 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * This material is provided "as is", with absolutely no warranty expressed 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * or implied. Any use is at your own risk. 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Permission to use or copy this software for any purpose is hereby granted 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * without fee, provided the above notices are retained on all copies. 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Permission to modify the code and to distribute modified code is granted, 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * provided the above notices are retained, and a notice that the code was 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * modified is included with the above copyright notice. 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* NOTE: This is an internal header file, included by other STL headers. 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * You should not attempt to use it directly. 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_INTERNAL_UNORDERED_MAP_H 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_INTERNAL_UNORDERED_MAP_H 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_INTERNAL_HASHTABLE_H 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# include <stl/_hashtable.h> 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_BEGIN_NAMESPACE 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//Specific iterator traits creation 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_CREATE_HASH_ITERATOR_TRAITS(UnorderedMapTraitsT, traits) 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_BEGIN_TR1_NAMESPACE 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Key, class _Tp, _STLP_DFL_TMPL_PARAM(_HashFcn,hash<_Key>), 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DFL_TMPL_PARAM(_EqualKey, equal_to<_Key>), 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEFAULT_PAIR_ALLOCATOR_SELECT(_STLP_CONST _Key, _Tp) > 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass unordered_map 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : public __stlport_class<unordered_map<_Key, _Tp, _HashFcn, _EqualKey, _Alloc> > 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprivate: 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef unordered_map<_Key, _Tp, _HashFcn, _EqualKey, _Alloc> _Self; 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _Key key_type; 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _Tp data_type; 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _Tp mapped_type; 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef pair<_STLP_CONST key_type, data_type> value_type; 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprivate: 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert //Specific iterator traits creation 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _STLP_PRIV _UnorderedMapTraitsT<value_type> _UnorderedMapTraits; 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef hashtable<value_type, key_type, _HashFcn, _UnorderedMapTraits, 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_SELECT1ST(value_type, _Key), _EqualKey, _Alloc > _Ht; 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::hasher hasher; 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::key_equal key_equal; 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::size_type size_type; 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::difference_type difference_type; 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::pointer pointer; 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::const_pointer const_pointer; 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::reference reference; 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::const_reference const_reference; 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::iterator iterator; 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::const_iterator const_iterator; 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::local_iterator local_iterator; 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::const_local_iterator const_local_iterator; 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::allocator_type allocator_type; 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert hasher hash_function() const { return _M_ht.hash_funct(); } 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert key_equal key_eq() const { return _M_ht.key_eq(); } 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert allocator_type get_allocator() const { return _M_ht.get_allocator(); } 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprivate: 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Ht _M_ht; 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_KEY_TYPE_FOR_CONT_EXT(key_type) 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert explicit unordered_map(size_type __n = 0, const hasher& __hf = hasher(), 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const key_equal& __eql = key_equal(), 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const allocator_type& __a = allocator_type()) 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_ht(__n, __hf, __eql, __a) {} 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (_STLP_NO_MOVE_SEMANTIC) 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unordered_map(__move_source<_Self> src) 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_ht(__move_source<_Ht>(src.get()._M_ht)) {} 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_MEMBER_TEMPLATES) 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _InputIterator> 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unordered_map(_InputIterator __f, _InputIterator __l, 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type __n = 0, const hasher& __hf = hasher(), 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const key_equal& __eql = key_equal(), 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const allocator_type& __a = allocator_type()) 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_ht(__n, __hf, __eql, __a) 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { _M_ht.insert_unique(__f, __l); } 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unordered_map(const value_type* __f, const value_type* __l, 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type __n = 0, const hasher& __hf = hasher(), 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const key_equal& __eql = key_equal(), 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const allocator_type& __a = allocator_type()) 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_ht(__n, __hf, __eql, __a) 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { _M_ht.insert_unique(__f, __l); } 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unordered_map(const_iterator __f, const_iterator __l, 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type __n = 0, const hasher& __hf = hasher(), 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const key_equal& __eql = key_equal(), 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const allocator_type& __a = allocator_type()) 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_ht(__n, __hf, __eql, __a) 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { _M_ht.insert_unique(__f, __l); } 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /*_STLP_MEMBER_TEMPLATES */ 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator = (const _Self& __other) 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { _M_ht = __other._M_ht; return *this; } 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type size() const { return _M_ht.size(); } 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type max_size() const { return _M_ht.max_size(); } 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool empty() const { return _M_ht.empty(); } 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void swap(_Self& __hs) { _M_ht.swap(__hs._M_ht); } 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void _M_swap_workaround(_Self& __x) { swap(__x); } 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator begin() { return _M_ht.begin(); } 12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator end() { return _M_ht.end(); } 13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_iterator begin() const { return _M_ht.begin(); } 13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_iterator end() const { return _M_ht.end(); } 13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert pair<iterator,bool> insert(const value_type& __obj) 13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return _M_ht.insert_unique(__obj); } 13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator insert(const_iterator /*__hint*/, const value_type& __obj) 13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return _M_ht.insert_unique(__obj); } 13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_MEMBER_TEMPLATES) 13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _InputIterator> 13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void insert(_InputIterator __f, _InputIterator __l) 14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void insert(const value_type* __f, const value_type* __l) 14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { _M_ht.insert_unique(__f,__l); } 14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void insert(const_iterator __f, const_iterator __l) 14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /*_STLP_MEMBER_TEMPLATES */ 14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { _M_ht.insert_unique(__f, __l); } 14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_TEMPLATE_FOR_CONT_EXT 14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator find(const _KT& __key) { return _M_ht.find(__key); } 14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_TEMPLATE_FOR_CONT_EXT 15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_iterator find(const _KT& __key) const { return _M_ht.find(__key); } 15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_TEMPLATE_FOR_CONT_EXT 15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Tp& operator[](const _KT& __key) { 15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator __it = _M_ht.find(__key); 15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return (__it == _M_ht.end() ? 15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_ht._M_insert(value_type(__key, _STLP_DEFAULT_CONSTRUCTED(_Tp))).second : 15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert (*__it).second ); 15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_TEMPLATE_FOR_CONT_EXT 16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type count(const _KT& __key) const { return _M_ht.count(__key); } 16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_TEMPLATE_FOR_CONT_EXT 16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert pair<iterator, iterator> equal_range(const _KT& __key) 16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return _M_ht.equal_range(__key); } 16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_TEMPLATE_FOR_CONT_EXT 16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert pair<const_iterator, const_iterator> equal_range(const _KT& __key) const 16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return _M_ht.equal_range(__key); } 16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type erase(const key_type& __key) {return _M_ht.erase(__key); } 17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void erase(const_iterator __it) { _M_ht.erase(__it); } 17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void erase(const_iterator __f, const_iterator __l) { _M_ht.erase(__f, __l); } 17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void clear() { _M_ht.clear(); } 17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type bucket_count() const { return _M_ht.bucket_count(); } 17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type max_bucket_count() const { return _M_ht.max_bucket_count(); } 17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type bucket_size(size_type __n) const { return _M_ht.elems_in_bucket(__n); } 17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_TEMPLATE_FOR_CONT_EXT 17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type bucket(const _KT& __k) const { return _M_ht.bucket(__k); } 18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert local_iterator begin(size_type __n) { return _M_ht.begin(__n); } 18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert local_iterator end(size_type __n) { return _M_ht.end(__n); } 18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_local_iterator begin(size_type __n) const { return _M_ht.begin(__n); } 18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_local_iterator end(size_type __n) const { return _M_ht.end(__n); } 18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float load_factor() const { return _M_ht.load_factor(); } 18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float max_load_factor() const { return _M_ht.max_load_factor(); } 18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void max_load_factor(float __val) { _M_ht.max_load_factor(__val); } 18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void rehash(size_type __hint) { _M_ht.rehash(__hint); } 18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (__DMC__) // disable operator==(pair<x,unordered_map>, pair<x,unordered_map>) 19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool operator==(const _Self&) const; 19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_END_NAMESPACE 19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//Specific iterator traits creation 19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_CREATE_HASH_ITERATOR_TRAITS(UnorderedMultimapTraitsT, traits) 19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_BEGIN_TR1_NAMESPACE 20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Key, class _Tp, _STLP_DFL_TMPL_PARAM(_HashFcn,hash<_Key>), 20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DFL_TMPL_PARAM(_EqualKey, equal_to<_Key>), 20411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEFAULT_PAIR_ALLOCATOR_SELECT(_STLP_CONST _Key, _Tp) > 20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass unordered_multimap 20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) 20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : public __stlport_class<unordered_multimap<_Key, _Tp, _HashFcn, _EqualKey, _Alloc> > 20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprivate: 21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef unordered_multimap<_Key, _Tp, _HashFcn, _EqualKey, _Alloc> _Self; 21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _Key key_type; 21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _Tp data_type; 21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _Tp mapped_type; 21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef pair<_STLP_CONST key_type, data_type> value_type; 21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprivate: 21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert //Specific iterator traits creation 21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _STLP_PRIV _UnorderedMultimapTraitsT<value_type> _UnorderedMultimapTraits; 22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef hashtable<value_type, key_type, _HashFcn, _UnorderedMultimapTraits, 22311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_SELECT1ST(value_type, _Key), _EqualKey, _Alloc > _Ht; 22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::hasher hasher; 22611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::key_equal key_equal; 22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::size_type size_type; 22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::difference_type difference_type; 23011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::pointer pointer; 23111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::const_pointer const_pointer; 23211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::reference reference; 23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::const_reference const_reference; 23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::iterator iterator; 23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::const_iterator const_iterator; 23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::local_iterator local_iterator; 23811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::const_local_iterator const_local_iterator; 23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Ht::allocator_type allocator_type; 24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert hasher hash_function() const { return _M_ht.hash_funct(); } 24311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert key_equal key_eq() const { return _M_ht.key_eq(); } 24411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert allocator_type get_allocator() const { return _M_ht.get_allocator(); } 24511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 24611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprivate: 24711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Ht _M_ht; 24811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_KEY_TYPE_FOR_CONT_EXT(key_type) 24911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 25011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 25111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert explicit unordered_multimap(size_type __n = 0, const hasher& __hf = hasher(), 25211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const key_equal& __eql = key_equal(), 25311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const allocator_type& __a = allocator_type()) 25411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_ht(__n, __hf, __eql, __a) {} 25511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 25611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (_STLP_NO_MOVE_SEMANTIC) 25711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unordered_multimap(__move_source<_Self> src) 25811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_ht(__move_source<_Ht>(src.get()._M_ht)) {} 25911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 26011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 26111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_MEMBER_TEMPLATES) 26211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _InputIterator> 26311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unordered_multimap(_InputIterator __f, _InputIterator __l, 26411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type __n = 0, const hasher& __hf = hasher(), 26511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const key_equal& __eql = key_equal(), 26611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const allocator_type& __a = allocator_type()) 26711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_ht(__n, __hf, __eql, __a) 26811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { _M_ht.insert_equal(__f, __l); } 26911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 27011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unordered_multimap(const value_type* __f, const value_type* __l, 27111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type __n = 0, const hasher& __hf = hasher(), 27211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const key_equal& __eql = key_equal(), 27311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const allocator_type& __a = allocator_type()) 27411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_ht(__n, __hf, __eql, __a) 27511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { _M_ht.insert_equal(__f, __l); } 27611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 27711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unordered_multimap(const_iterator __f, const_iterator __l, 27811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type __n = 0, const hasher& __hf = hasher(), 27911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const key_equal& __eql = key_equal(), 28011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const allocator_type& __a = allocator_type()) 28111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_ht(__n, __hf, __eql, __a) 28211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { _M_ht.insert_equal(__f, __l); } 28311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /*_STLP_MEMBER_TEMPLATES */ 28411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 28511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator = (const _Self& __other) 28611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { _M_ht = __other._M_ht; return *this; } 28711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 28811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type size() const { return _M_ht.size(); } 28911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type max_size() const { return _M_ht.max_size(); } 29011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool empty() const { return _M_ht.empty(); } 29111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void swap(_Self& __hs) { _M_ht.swap(__hs._M_ht); } 29211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 29311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void _M_swap_workaround(_Self& __x) { swap(__x); } 29411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 29511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 29611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator begin() { return _M_ht.begin(); } 29711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator end() { return _M_ht.end(); } 29811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_iterator begin() const { return _M_ht.begin(); } 29911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_iterator end() const { return _M_ht.end(); } 30011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 30111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator insert(const value_type& __obj) 30211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return _M_ht.insert_equal(__obj); } 30311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator insert(const_iterator /*__hint*/, const value_type& __obj) 30411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return _M_ht.insert_equal(__obj); } 30511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_MEMBER_TEMPLATES) 30611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _InputIterator> 30711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void insert(_InputIterator __f, _InputIterator __l) 30811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 30911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void insert(const value_type* __f, const value_type* __l) 31011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { _M_ht.insert_equal(__f,__l); } 31111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void insert(const_iterator __f, const_iterator __l) 31211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /*_STLP_MEMBER_TEMPLATES */ 31311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { _M_ht.insert_equal(__f, __l); } 31411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 31511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_TEMPLATE_FOR_CONT_EXT 31611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator find(const _KT& __key) { return _M_ht.find(__key); } 31711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_TEMPLATE_FOR_CONT_EXT 31811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_iterator find(const _KT& __key) const { return _M_ht.find(__key); } 31911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_TEMPLATE_FOR_CONT_EXT 32111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type count(const _KT& __key) const { return _M_ht.count(__key); } 32211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_TEMPLATE_FOR_CONT_EXT 32411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert pair<iterator, iterator> equal_range(const _KT& __key) 32511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return _M_ht.equal_range(__key); } 32611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_TEMPLATE_FOR_CONT_EXT 32711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert pair<const_iterator, const_iterator> equal_range(const _KT& __key) const 32811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return _M_ht.equal_range(__key); } 32911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 33011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type erase(const key_type& __key) {return _M_ht.erase(__key); } 33111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void erase(const_iterator __it) { _M_ht.erase(__it); } 33211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void erase(const_iterator __f, const_iterator __l) { _M_ht.erase(__f, __l); } 33311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void clear() { _M_ht.clear(); } 33411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 33511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type bucket_count() const { return _M_ht.bucket_count(); } 33611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type max_bucket_count() const { return _M_ht.max_bucket_count(); } 33711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type bucket_size(size_type __n) const { return _M_ht.elems_in_bucket(__n); } 33811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_TEMPLATE_FOR_CONT_EXT 33911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type bucket(const _KT& __k) const { return _M_ht.bucket(__k); } 34011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert local_iterator begin(size_type __n) { return _M_ht.begin(__n); } 34111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert local_iterator end(size_type __n) { return _M_ht.end(__n); } 34211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_local_iterator begin(size_type __n) const { return _M_ht.begin(__n); } 34311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_local_iterator end(size_type __n) const { return _M_ht.end(__n); } 34411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 34511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float load_factor() const { return _M_ht.load_factor(); } 34611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float max_load_factor() const { return _M_ht.max_load_factor(); } 34711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void max_load_factor(float __val) { _M_ht.max_load_factor(__val); } 34811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void rehash(size_type __hint) { _M_ht.rehash(__hint); } 34911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 35011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 35111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_TEMPLATE_HEADER template <class _Key, class _Tp, class _HashFcn, class _EqlKey, class _Alloc> 35211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_TEMPLATE_CONTAINER unordered_map<_Key,_Tp,_HashFcn,_EqlKey,_Alloc> 35311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 35411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <stl/_relops_hash_cont.h> 35511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 35611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#undef _STLP_TEMPLATE_CONTAINER 35711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_TEMPLATE_CONTAINER unordered_multimap<_Key,_Tp,_HashFcn,_EqlKey,_Alloc> 35811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 35911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <stl/_relops_hash_cont.h> 36011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 36111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#undef _STLP_TEMPLATE_CONTAINER 36211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#undef _STLP_TEMPLATE_HEADER 36311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 36411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_END_NAMESPACE 36511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 36611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Specialization of insert_iterator so that it will work for unordered_map 36711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// and unordered_multimap. 36811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 36911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 37011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if !defined (_STLP_NO_MOVE_SEMANTIC) 37111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Key, class _Tp, class _HashFn, class _EqKey, class _Alloc> 37211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct __move_traits<_STLP_TR1 unordered_map<_Key, _Tp, _HashFn, _EqKey, _Alloc> > : 37311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_PRIV __move_traits_help<typename _STLP_TR1 unordered_map<_Key, _Tp, _HashFn, _EqKey, _Alloc>::_Ht> 37411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{}; 37511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 37611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Key, class _Tp, class _HashFn, class _EqKey, class _Alloc> 37711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct __move_traits<_STLP_TR1 unordered_multimap<_Key, _Tp, _HashFn, _EqKey, _Alloc> > : 37811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_PRIV __move_traits_help<typename _STLP_TR1 unordered_map<_Key, _Tp, _HashFn, _EqKey, _Alloc>::_Ht> 37911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{}; 38011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 38111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 38211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Key, class _Tp, class _HashFn, class _EqKey, class _Alloc> 38311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass insert_iterator<_STLP_TR1 unordered_map<_Key, _Tp, _HashFn, _EqKey, _Alloc> > { 38411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprotected: 38511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _STLP_TR1 unordered_map<_Key, _Tp, _HashFn, _EqKey, _Alloc> _Container; 38611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Container* container; 38711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 38811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _Container container_type; 38911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef output_iterator_tag iterator_category; 39011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef void value_type; 39111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef void difference_type; 39211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef void pointer; 39311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef void reference; 39411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 39511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert_iterator(_Container& __x) : container(&__x) {} 39611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert_iterator(_Container& __x, typename _Container::iterator) 39711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : container(&__x) {} 39811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert_iterator<_Container>& 39911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert operator=(const typename _Container::value_type& __val) { 40011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert container->insert(__val); 40111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 40211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 40311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert_iterator<_Container>& operator*() { return *this; } 40411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert_iterator<_Container>& operator++() { return *this; } 40511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert_iterator<_Container>& operator++(int) { return *this; } 40611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 40711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 40811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Key, class _Tp, class _HashFn, class _EqKey, class _Alloc> 40911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass insert_iterator<_STLP_TR1 unordered_multimap<_Key, _Tp, _HashFn, _EqKey, _Alloc> > { 41011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprotected: 41111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _STLP_TR1 unordered_multimap<_Key, _Tp, _HashFn, _EqKey, _Alloc> _Container; 41211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Container* container; 41311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typename _Container::iterator iter; 41411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 41511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _Container container_type; 41611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef output_iterator_tag iterator_category; 41711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef void value_type; 41811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef void difference_type; 41911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef void pointer; 42011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef void reference; 42111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 42211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert_iterator(_Container& __x) : container(&__x) {} 42311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert_iterator(_Container& __x, typename _Container::iterator) 42411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : container(&__x) {} 42511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert_iterator<_Container>& 42611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert operator=(const typename _Container::value_type& __val) { 42711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert container->insert(__val); 42811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 42911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 43011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert_iterator<_Container>& operator*() { return *this; } 43111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert_iterator<_Container>& operator++() { return *this; } 43211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert_iterator<_Container>& operator++(int) { return *this; } 43311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 43411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 43511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _STLP_CLASS_PARTIAL_SPECIALIZATION */ 43611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 43711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_END_NAMESPACE 43811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 43911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _STLP_INTERNAL_UNORDERED_MAP_H */ 44011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 44111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Local Variables: 44211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// mode:C++ 44311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// End: 444