epoc32/include/tools/stlport/stl/_unordered_set.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@4
     1
/*
williamr@4
     2
 * Copyright (c) 2004
williamr@4
     3
 * Francois Dumont
williamr@4
     4
 *
williamr@4
     5
 * This material is provided "as is", with absolutely no warranty expressed
williamr@4
     6
 * or implied. Any use is at your own risk.
williamr@4
     7
 *
williamr@4
     8
 * Permission to use or copy this software for any purpose is hereby granted
williamr@4
     9
 * without fee, provided the above notices are retained on all copies.
williamr@4
    10
 * Permission to modify the code and to distribute modified code is granted,
williamr@4
    11
 * provided the above notices are retained, and a notice that the code was
williamr@4
    12
 * modified is included with the above copyright notice.
williamr@4
    13
 *
williamr@4
    14
 */
williamr@4
    15
williamr@4
    16
/* NOTE: This is an internal header file, included by other STL headers.
williamr@4
    17
 *   You should not attempt to use it directly.
williamr@4
    18
 */
williamr@4
    19
williamr@4
    20
#ifndef _STLP_INTERNAL_UNORDERED_SET_H
williamr@4
    21
#define _STLP_INTERNAL_UNORDERED_SET_H
williamr@4
    22
williamr@4
    23
#ifndef _STLP_INTERNAL_HASHTABLE_H
williamr@4
    24
#  include <stl/_hashtable.h>
williamr@4
    25
#endif
williamr@4
    26
williamr@4
    27
_STLP_BEGIN_NAMESPACE
williamr@4
    28
williamr@4
    29
//Specific iterator traits creation
williamr@4
    30
_STLP_CREATE_HASH_ITERATOR_TRAITS(UnorderedSetTraitsT, Const_traits)
williamr@4
    31
williamr@4
    32
template <class _Value, _STLP_DFL_TMPL_PARAM(_HashFcn,hash<_Value>),
williamr@4
    33
          _STLP_DFL_TMPL_PARAM(_EqualKey,equal_to<_Value>),
williamr@4
    34
          _STLP_DEFAULT_ALLOCATOR_SELECT(_Value) >
williamr@4
    35
class unordered_set
williamr@4
    36
#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND)
williamr@4
    37
               : public __stlport_class<unordered_set<_Value, _HashFcn, _EqualKey, _Alloc> >
williamr@4
    38
#endif
williamr@4
    39
{
williamr@4
    40
  typedef unordered_set<_Value, _HashFcn, _EqualKey, _Alloc> _Self;
williamr@4
    41
  //Specific iterator traits creation
williamr@4
    42
  typedef _STLP_PRIV _UnorderedSetTraitsT<_Value> _UnorderedSetTraits;
williamr@4
    43
public:
williamr@4
    44
  typedef hashtable<_Value, _Value, _HashFcn,
williamr@4
    45
                    _UnorderedSetTraits, _STLP_PRIV _Identity<_Value>, _EqualKey, _Alloc> _Ht;
williamr@4
    46
public:
williamr@4
    47
  typedef typename _Ht::key_type key_type;
williamr@4
    48
  typedef typename _Ht::value_type value_type;
williamr@4
    49
  typedef typename _Ht::hasher hasher;
williamr@4
    50
  typedef typename _Ht::key_equal key_equal;
williamr@4
    51
williamr@4
    52
  typedef typename _Ht::size_type size_type;
williamr@4
    53
  typedef typename _Ht::difference_type difference_type;
williamr@4
    54
  typedef typename _Ht::pointer         pointer;
williamr@4
    55
  typedef typename _Ht::const_pointer   const_pointer;
williamr@4
    56
  typedef typename _Ht::reference       reference;
williamr@4
    57
  typedef typename _Ht::const_reference const_reference;
williamr@4
    58
williamr@4
    59
  typedef typename _Ht::iterator iterator;
williamr@4
    60
  typedef typename _Ht::const_iterator const_iterator;
williamr@4
    61
  typedef typename _Ht::local_iterator local_iterator;
williamr@4
    62
  typedef typename _Ht::const_local_iterator const_local_iterator;
williamr@4
    63
williamr@4
    64
  typedef typename _Ht::allocator_type allocator_type;
williamr@4
    65
williamr@4
    66
  hasher hash_function() const { return _M_ht.hash_funct(); }
williamr@4
    67
  key_equal key_eq() const { return _M_ht.key_eq(); }
williamr@4
    68
  allocator_type get_allocator() const { return _M_ht.get_allocator(); }
williamr@4
    69
williamr@4
    70
private:
williamr@4
    71
  _Ht _M_ht;
williamr@4
    72
  _STLP_KEY_TYPE_FOR_CONT_EXT(key_type)
williamr@4
    73
williamr@4
    74
public:
williamr@4
    75
  explicit unordered_set(size_type __n = 100, const hasher& __hf = hasher(),
williamr@4
    76
                         const key_equal& __eql = key_equal(),
williamr@4
    77
                         const allocator_type& __a = allocator_type())
williamr@4
    78
    : _M_ht(__n, __hf, __eql, __a) {}
williamr@4
    79
williamr@4
    80
  unordered_set(__move_source<_Self> src)
williamr@4
    81
    : _M_ht(__move_source<_Ht>(src.get()._M_ht)) {}
williamr@4
    82
williamr@4
    83
#if defined (_STLP_MEMBER_TEMPLATES)
williamr@4
    84
  template <class _InputIterator>
williamr@4
    85
  unordered_set(_InputIterator __f, _InputIterator __l,
williamr@4
    86
                size_type __n = 100, const hasher& __hf = hasher(),
williamr@4
    87
                const key_equal& __eql = key_equal(),
williamr@4
    88
                const allocator_type& __a = allocator_type())
williamr@4
    89
    : _M_ht(__n, __hf, __eql, __a)
williamr@4
    90
  { _M_ht.insert_unique(__f, __l); }
williamr@4
    91
#else
williamr@4
    92
  unordered_set(const value_type* __f, const value_type* __l,
williamr@4
    93
                size_type __n = 100, const hasher& __hf = hasher(),
williamr@4
    94
                const key_equal& __eql = key_equal(),
williamr@4
    95
                const allocator_type& __a = allocator_type())
williamr@4
    96
    : _M_ht(__n, __hf, __eql, __a)
williamr@4
    97
  { _M_ht.insert_unique(__f, __l); }
williamr@4
    98
williamr@4
    99
  unordered_set(const_iterator __f, const_iterator __l,
williamr@4
   100
                size_type __n = 100, const hasher& __hf = hasher(),
williamr@4
   101
                const key_equal& __eql = key_equal(),
williamr@4
   102
                const allocator_type& __a = allocator_type())
williamr@4
   103
    : _M_ht(__n, __hf, __eql, __a)
williamr@4
   104
  { _M_ht.insert_unique(__f, __l); }
williamr@4
   105
#endif /*_STLP_MEMBER_TEMPLATES */
williamr@4
   106
williamr@4
   107
  _Self& operator = (const _Self& __other)
williamr@4
   108
  { _M_ht = __other._M_ht; return *this; }
williamr@4
   109
williamr@4
   110
  size_type size() const { return _M_ht.size(); }
williamr@4
   111
  size_type max_size() const { return _M_ht.max_size(); }
williamr@4
   112
  bool empty() const { return _M_ht.empty(); }
williamr@4
   113
  void swap(_Self& __hs) { _M_ht.swap(__hs._M_ht); }
williamr@4
   114
williamr@4
   115
  iterator begin() { return _M_ht.begin(); }
williamr@4
   116
  iterator end() { return _M_ht.end(); }
williamr@4
   117
  const_iterator begin() const { return _M_ht.begin(); }
williamr@4
   118
  const_iterator end() const { return _M_ht.end(); }
williamr@4
   119
williamr@4
   120
  pair<iterator, bool> insert(const value_type& __obj)
williamr@4
   121
  { return _M_ht.insert_unique(__obj); }
williamr@4
   122
  iterator insert(const_iterator /*__hint*/, const value_type& __obj)
williamr@4
   123
  { return _M_ht.insert_unique(__obj); }
williamr@4
   124
#if defined (_STLP_MEMBER_TEMPLATES)
williamr@4
   125
  template <class _InputIterator>
williamr@4
   126
  void insert(_InputIterator __f, _InputIterator __l)
williamr@4
   127
#else
williamr@4
   128
  void insert(const_iterator __f, const_iterator __l)
williamr@4
   129
  {_M_ht.insert_unique(__f, __l); }
williamr@4
   130
  void insert(const value_type* __f, const value_type* __l)
williamr@4
   131
#endif
williamr@4
   132
  { _M_ht.insert_unique(__f,__l); }
williamr@4
   133
williamr@4
   134
  _STLP_TEMPLATE_FOR_CONT_EXT
williamr@4
   135
  iterator find(const _KT& __key) { return _M_ht.find(__key); }
williamr@4
   136
  _STLP_TEMPLATE_FOR_CONT_EXT
williamr@4
   137
  const_iterator find(const _KT& __key) const { return _M_ht.find(__key); }
williamr@4
   138
williamr@4
   139
  _STLP_TEMPLATE_FOR_CONT_EXT
williamr@4
   140
  size_type count(const _KT& __key) const { return _M_ht.count(__key); }
williamr@4
   141
williamr@4
   142
  _STLP_TEMPLATE_FOR_CONT_EXT
williamr@4
   143
  pair<iterator, iterator> equal_range(const _KT& __key)
williamr@4
   144
  { return _M_ht.equal_range(__key); }
williamr@4
   145
  _STLP_TEMPLATE_FOR_CONT_EXT
williamr@4
   146
  pair<const_iterator, const_iterator> equal_range(const _KT& __key) const
williamr@4
   147
  { return _M_ht.equal_range(__key); }
williamr@4
   148
williamr@4
   149
  size_type erase(const key_type& __key) {return _M_ht.erase(__key); }
williamr@4
   150
  void erase(const_iterator __it) { _M_ht.erase(__it); }
williamr@4
   151
  void erase(const_iterator __f, const_iterator __l) { _M_ht.erase(__f, __l); }
williamr@4
   152
  void clear() { _M_ht.clear(); }
williamr@4
   153
williamr@4
   154
  size_type bucket_count() const { return _M_ht.bucket_count(); }
williamr@4
   155
  size_type max_bucket_count() const { return _M_ht.max_bucket_count(); }
williamr@4
   156
  size_type bucket_size(size_type __n) const { return _M_ht.elems_in_bucket(__n); }
williamr@4
   157
  _STLP_TEMPLATE_FOR_CONT_EXT
williamr@4
   158
  size_type bucket(const _KT& __k) const { return _M_ht.bucket(__k); }
williamr@4
   159
  local_iterator begin(size_type __n) { return _M_ht.begin(__n); }
williamr@4
   160
  local_iterator end(size_type __n) { return _M_ht.end(__n); }
williamr@4
   161
  const_local_iterator begin(size_type __n) const { return _M_ht.begin(__n); }
williamr@4
   162
  const_local_iterator end(size_type __n) const { return _M_ht.end(__n); }
williamr@4
   163
williamr@4
   164
  float load_factor() const { return _M_ht.load_factor(); }
williamr@4
   165
  float max_load_factor() const { return _M_ht.max_load_factor(); }
williamr@4
   166
  void max_load_factor(float __val) { _M_ht.max_load_factor(__val); }
williamr@4
   167
  void rehash(size_type __hint) { _M_ht.rehash(__hint); }
williamr@4
   168
};
williamr@4
   169
williamr@4
   170
//Specific iterator traits creation
williamr@4
   171
_STLP_CREATE_HASH_ITERATOR_TRAITS(UnorderedMultisetTraitsT, Const_traits)
williamr@4
   172
williamr@4
   173
template <class _Value, _STLP_DFL_TMPL_PARAM(_HashFcn,hash<_Value>),
williamr@4
   174
          _STLP_DFL_TMPL_PARAM(_EqualKey,equal_to<_Value>),
williamr@4
   175
          _STLP_DEFAULT_ALLOCATOR_SELECT(_Value) >
williamr@4
   176
class unordered_multiset
williamr@4
   177
#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND)
williamr@4
   178
               : public __stlport_class<unordered_multiset<_Value, _HashFcn, _EqualKey, _Alloc> >
williamr@4
   179
#endif
williamr@4
   180
{
williamr@4
   181
  typedef unordered_multiset<_Value, _HashFcn, _EqualKey, _Alloc> _Self;
williamr@4
   182
  //Specific iterator traits creation
williamr@4
   183
  typedef _STLP_PRIV _UnorderedMultisetTraitsT<_Value> _UnorderedMultisetTraits;
williamr@4
   184
public:
williamr@4
   185
  typedef hashtable<_Value, _Value, _HashFcn,
williamr@4
   186
                    _UnorderedMultisetTraits, _STLP_PRIV _Identity<_Value>, _EqualKey, _Alloc> _Ht;
williamr@4
   187
williamr@4
   188
  typedef typename _Ht::key_type key_type;
williamr@4
   189
  typedef typename _Ht::value_type value_type;
williamr@4
   190
  typedef typename _Ht::hasher hasher;
williamr@4
   191
  typedef typename _Ht::key_equal key_equal;
williamr@4
   192
williamr@4
   193
  typedef typename _Ht::size_type size_type;
williamr@4
   194
  typedef typename _Ht::difference_type difference_type;
williamr@4
   195
  typedef typename _Ht::pointer       pointer;
williamr@4
   196
  typedef typename _Ht::const_pointer const_pointer;
williamr@4
   197
  typedef typename _Ht::reference reference;
williamr@4
   198
  typedef typename _Ht::const_reference const_reference;
williamr@4
   199
williamr@4
   200
  typedef typename _Ht::iterator iterator;
williamr@4
   201
  typedef typename _Ht::const_iterator const_iterator;
williamr@4
   202
  typedef typename _Ht::local_iterator local_iterator;
williamr@4
   203
  typedef typename _Ht::const_local_iterator const_local_iterator;
williamr@4
   204
williamr@4
   205
  typedef typename _Ht::allocator_type allocator_type;
williamr@4
   206
williamr@4
   207
  hasher hash_function() const { return _M_ht.hash_funct(); }
williamr@4
   208
  key_equal key_eq() const { return _M_ht.key_eq(); }
williamr@4
   209
  allocator_type get_allocator() const { return _M_ht.get_allocator(); }
williamr@4
   210
williamr@4
   211
private:
williamr@4
   212
  _Ht _M_ht;
williamr@4
   213
  _STLP_KEY_TYPE_FOR_CONT_EXT(key_type)
williamr@4
   214
williamr@4
   215
public:
williamr@4
   216
  explicit unordered_multiset(size_type __n = 100, const hasher& __hf = hasher(),
williamr@4
   217
                              const key_equal& __eql = key_equal(),
williamr@4
   218
                              const allocator_type& __a = allocator_type())
williamr@4
   219
    : _M_ht(__n, __hf, __eql, __a) {}
williamr@4
   220
williamr@4
   221
  unordered_multiset(__move_source<_Self> src)
williamr@4
   222
    : _M_ht(__move_source<_Ht>(src.get()._M_ht)) {}
williamr@4
   223
williamr@4
   224
#if defined (_STLP_MEMBER_TEMPLATES)
williamr@4
   225
  template <class _InputIterator>
williamr@4
   226
  unordered_multiset(_InputIterator __f, _InputIterator __l,
williamr@4
   227
                     size_type __n = 100, const hasher& __hf = hasher(),
williamr@4
   228
                     const key_equal& __eql = key_equal(),
williamr@4
   229
                     const allocator_type& __a = allocator_type())
williamr@4
   230
    : _M_ht(__n, __hf, __eql, __a)
williamr@4
   231
  { _M_ht.insert_equal(__f, __l); }
williamr@4
   232
#else
williamr@4
   233
  unordered_multiset(const value_type* __f, const value_type* __l,
williamr@4
   234
                     size_type __n = 100, const hasher& __hf = hasher(),
williamr@4
   235
                     const key_equal& __eql = key_equal(),
williamr@4
   236
                     const allocator_type& __a = allocator_type())
williamr@4
   237
    : _M_ht(__n, __hf, __eql, __a)
williamr@4
   238
  { _M_ht.insert_equal(__f, __l); }
williamr@4
   239
williamr@4
   240
  unordered_multiset(const_iterator __f, const_iterator __l,
williamr@4
   241
                     size_type __n = 100, const hasher& __hf = hasher(),
williamr@4
   242
                     const key_equal& __eql = key_equal(),
williamr@4
   243
                     const allocator_type& __a = allocator_type())
williamr@4
   244
    : _M_ht(__n, __hf, __eql, __a)
williamr@4
   245
  { _M_ht.insert_equal(__f, __l); }
williamr@4
   246
#endif /*_STLP_MEMBER_TEMPLATES */
williamr@4
   247
williamr@4
   248
  _Self& operator = (const _Self& __other)
williamr@4
   249
  { _M_ht = __other._M_ht; return *this; }
williamr@4
   250
williamr@4
   251
  size_type size() const { return _M_ht.size(); }
williamr@4
   252
  size_type max_size() const { return _M_ht.max_size(); }
williamr@4
   253
  bool empty() const { return _M_ht.empty(); }
williamr@4
   254
  void swap(_Self& hs) { _M_ht.swap(hs._M_ht); }
williamr@4
   255
williamr@4
   256
  iterator begin() { return _M_ht.begin(); }
williamr@4
   257
  iterator end() { return _M_ht.end(); }
williamr@4
   258
  const_iterator begin() const { return _M_ht.begin(); }
williamr@4
   259
  const_iterator end() const { return _M_ht.end(); }
williamr@4
   260
williamr@4
   261
  iterator insert(const value_type& __obj)
williamr@4
   262
  { return _M_ht.insert_equal(__obj); }
williamr@4
   263
  iterator insert(const_iterator /*__hint*/, const value_type& __obj)
williamr@4
   264
  { return _M_ht.insert_equal(__obj); }
williamr@4
   265
#if defined (_STLP_MEMBER_TEMPLATES)
williamr@4
   266
  template <class _InputIterator>
williamr@4
   267
  void insert(_InputIterator __f, _InputIterator __l)
williamr@4
   268
#else
williamr@4
   269
  void insert(const value_type* __f, const value_type* __l)
williamr@4
   270
  { _M_ht.insert_equal(__f,__l); }
williamr@4
   271
  void insert(const_iterator __f, const_iterator __l)
williamr@4
   272
#endif /*_STLP_MEMBER_TEMPLATES */
williamr@4
   273
  { _M_ht.insert_equal(__f, __l); }
williamr@4
   274
williamr@4
   275
  _STLP_TEMPLATE_FOR_CONT_EXT
williamr@4
   276
  iterator find(const _KT& __key) { return _M_ht.find(__key); }
williamr@4
   277
  _STLP_TEMPLATE_FOR_CONT_EXT
williamr@4
   278
  const_iterator find(const _KT& __key) const { return _M_ht.find(__key); }
williamr@4
   279
williamr@4
   280
  _STLP_TEMPLATE_FOR_CONT_EXT
williamr@4
   281
  size_type count(const _KT& __key) const { return _M_ht.count(__key); }
williamr@4
   282
williamr@4
   283
  _STLP_TEMPLATE_FOR_CONT_EXT
williamr@4
   284
  pair<iterator, iterator> equal_range(const _KT& __key)
williamr@4
   285
  { return _M_ht.equal_range(__key); }
williamr@4
   286
  _STLP_TEMPLATE_FOR_CONT_EXT
williamr@4
   287
  pair<const_iterator, const_iterator> equal_range(const _KT& __key) const
williamr@4
   288
  { return _M_ht.equal_range(__key); }
williamr@4
   289
williamr@4
   290
  size_type erase(const key_type& __key) {return _M_ht.erase(__key); }
williamr@4
   291
  void erase(const_iterator __it) { _M_ht.erase(__it); }
williamr@4
   292
  void erase(const_iterator __f, const_iterator __l) { _M_ht.erase(__f, __l); }
williamr@4
   293
  void clear() { _M_ht.clear(); }
williamr@4
   294
williamr@4
   295
  size_type bucket_count() const { return _M_ht.bucket_count(); }
williamr@4
   296
  size_type max_bucket_count() const { return _M_ht.max_bucket_count(); }
williamr@4
   297
  size_type bucket_size(size_type __n) const { return _M_ht.elems_in_bucket(__n); }
williamr@4
   298
  _STLP_TEMPLATE_FOR_CONT_EXT
williamr@4
   299
  size_type bucket(const _KT& __k) const { return _M_ht.bucket(__k); }
williamr@4
   300
  local_iterator begin(size_type __n) { return _M_ht.begin(__n); }
williamr@4
   301
  local_iterator end(size_type __n) { return _M_ht.end(__n); }
williamr@4
   302
  const_local_iterator begin(size_type __n) const { return _M_ht.begin(__n); }
williamr@4
   303
  const_local_iterator end(size_type __n) const { return _M_ht.end(__n); }
williamr@4
   304
williamr@4
   305
  float load_factor() const { return _M_ht.load_factor(); }
williamr@4
   306
  float max_load_factor() const { return _M_ht.max_load_factor(); }
williamr@4
   307
  void max_load_factor(float __val) { _M_ht.max_load_factor(__val); }
williamr@4
   308
  void rehash(size_type __hint) { _M_ht.rehash(__hint); }
williamr@4
   309
};
williamr@4
   310
williamr@4
   311
#define _STLP_TEMPLATE_HEADER template <class _Value, class _HashFcn, class _EqualKey, class _Alloc>
williamr@4
   312
#define _STLP_TEMPLATE_CONTAINER unordered_set<_Value,_HashFcn,_EqualKey,_Alloc>
williamr@4
   313
williamr@4
   314
#include <stl/_relops_hash_cont.h>
williamr@4
   315
williamr@4
   316
#undef _STLP_TEMPLATE_CONTAINER
williamr@4
   317
#define _STLP_TEMPLATE_CONTAINER unordered_multiset<_Value,_HashFcn,_EqualKey,_Alloc>
williamr@4
   318
#include <stl/_relops_hash_cont.h>
williamr@4
   319
williamr@4
   320
#undef _STLP_TEMPLATE_CONTAINER
williamr@4
   321
#undef _STLP_TEMPLATE_HEADER
williamr@4
   322
williamr@4
   323
// Specialization of insert_iterator so that it will work for unordered_set
williamr@4
   324
// and unordered_multiset.
williamr@4
   325
williamr@4
   326
#if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
williamr@4
   327
template <class _Value, class _HashFcn, class _EqualKey, class _Alloc>
williamr@4
   328
struct __move_traits<unordered_set<_Value, _HashFcn, _EqualKey, _Alloc> > :
williamr@4
   329
  _STLP_PRIV __move_traits_aux<typename unordered_set<_Value, _HashFcn, _EqualKey, _Alloc>::_Ht>
williamr@4
   330
{};
williamr@4
   331
williamr@4
   332
template <class _Value, class _HashFcn, class _EqualKey, class _Alloc>
williamr@4
   333
struct __move_traits<unordered_multiset<_Value, _HashFcn, _EqualKey, _Alloc> > :
williamr@4
   334
  _STLP_PRIV __move_traits_aux<typename unordered_multiset<_Value, _HashFcn, _EqualKey, _Alloc>::_Ht>
williamr@4
   335
{};
williamr@4
   336
williamr@4
   337
template <class _Value, class _HashFcn, class _EqualKey, class _Alloc>
williamr@4
   338
class insert_iterator<unordered_set<_Value, _HashFcn, _EqualKey, _Alloc> > {
williamr@4
   339
protected:
williamr@4
   340
  typedef unordered_set<_Value, _HashFcn, _EqualKey, _Alloc> _Container;
williamr@4
   341
  _Container* container;
williamr@4
   342
public:
williamr@4
   343
  typedef _Container          container_type;
williamr@4
   344
  typedef output_iterator_tag iterator_category;
williamr@4
   345
  typedef void                value_type;
williamr@4
   346
  typedef void                difference_type;
williamr@4
   347
  typedef void                pointer;
williamr@4
   348
  typedef void                reference;
williamr@4
   349
williamr@4
   350
  insert_iterator(_Container& __x) : container(&__x) {}
williamr@4
   351
  insert_iterator(_Container& __x, typename _Container::iterator)
williamr@4
   352
    : container(&__x) {}
williamr@4
   353
  insert_iterator<_Container>&
williamr@4
   354
  operator=(const typename _Container::value_type& __val) {
williamr@4
   355
    container->insert(__val);
williamr@4
   356
    return *this;
williamr@4
   357
  }
williamr@4
   358
  insert_iterator<_Container>& operator*() { return *this; }
williamr@4
   359
  insert_iterator<_Container>& operator++() { return *this; }
williamr@4
   360
  insert_iterator<_Container>& operator++(int) { return *this; }
williamr@4
   361
};
williamr@4
   362
williamr@4
   363
template <class _Value, class _HashFcn, class _EqualKey, class _Alloc>
williamr@4
   364
class insert_iterator<unordered_multiset<_Value, _HashFcn, _EqualKey, _Alloc> > {
williamr@4
   365
protected:
williamr@4
   366
  typedef unordered_multiset<_Value, _HashFcn, _EqualKey, _Alloc> _Container;
williamr@4
   367
  _Container* container;
williamr@4
   368
  typename _Container::iterator iter;
williamr@4
   369
public:
williamr@4
   370
  typedef _Container          container_type;
williamr@4
   371
  typedef output_iterator_tag iterator_category;
williamr@4
   372
  typedef void                value_type;
williamr@4
   373
  typedef void                difference_type;
williamr@4
   374
  typedef void                pointer;
williamr@4
   375
  typedef void                reference;
williamr@4
   376
williamr@4
   377
  insert_iterator(_Container& __x) : container(&__x) {}
williamr@4
   378
  insert_iterator(_Container& __x, typename _Container::iterator)
williamr@4
   379
    : container(&__x) {}
williamr@4
   380
  insert_iterator<_Container>&
williamr@4
   381
  operator=(const typename _Container::value_type& __val) {
williamr@4
   382
    container->insert(__val);
williamr@4
   383
    return *this;
williamr@4
   384
  }
williamr@4
   385
  insert_iterator<_Container>& operator*() { return *this; }
williamr@4
   386
  insert_iterator<_Container>& operator++() { return *this; }
williamr@4
   387
  insert_iterator<_Container>& operator++(int) { return *this; }
williamr@4
   388
};
williamr@4
   389
#endif /* _STLP_CLASS_PARTIAL_SPECIALIZATION */
williamr@4
   390
williamr@4
   391
_STLP_END_NAMESPACE
williamr@4
   392
williamr@4
   393
#endif /* _STLP_INTERNAL_UNORDERED_SET_H */
williamr@4
   394
williamr@4
   395
// Local Variables:
williamr@4
   396
// mode:C++
williamr@4
   397
// End:
williamr@4
   398