Attempt to represent the S^2->S^3 header reorganisation as a series of "hg rename" operations
4 * Hewlett-Packard Company
6 * Copyright (c) 1996,1997
7 * Silicon Graphics Computer Systems, Inc.
10 * Moscow Center for SPARC Technology
15 * This material is provided "as is", with absolutely no warranty expressed
16 * or implied. Any use is at your own risk.
18 * Permission to use or copy this software for any purpose is hereby granted
19 * without fee, provided the above notices are retained on all copies.
20 * Permission to modify the code and to distribute modified code is granted,
21 * provided the above notices are retained, and a notice that the code was
22 * modified is included with the above copyright notice.
26 /* NOTE: This is an internal header file, included by other STL headers.
27 * You should not attempt to use it directly.
30 #ifndef _STLP_INTERNAL_HASH_MAP_H
31 #define _STLP_INTERNAL_HASH_MAP_H
33 #ifndef _STLP_INTERNAL_HASHTABLE_H
34 # include <stl/_hashtable.h>
39 # define hash_map __WORKAROUND_RENAME(hash_map)
40 # define hash_multimap __WORKAROUND_RENAME(hash_multimap)
42 # define _STLP_KEY_PAIR pair< const _Key, _Tp >
43 # define _STLP_HASHTABLE hashtable \
44 < pair < const _Key, _Tp >, _Key, _HashFcn, \
45 _STLP_SELECT1ST( _STLP_KEY_PAIR, _Key ), _EqualKey, _Alloc >
47 template <class _Key, class _Tp, __DFL_TMPL_PARAM(_HashFcn,hash<_Key>),
48 __DFL_TMPL_PARAM(_EqualKey,equal_to<_Key>),
49 _STLP_DEFAULT_PAIR_ALLOCATOR_SELECT(const _Key, _Tp) >
53 typedef _STLP_HASHTABLE _Ht;
54 typedef hash_map<_Key, _Tp, _HashFcn, _EqualKey, _Alloc> _Self;
56 typedef typename _Ht::key_type key_type;
57 typedef _Tp data_type;
58 typedef _Tp mapped_type;
59 typedef typename _Ht::value_type _value_type;
60 typedef typename _Ht::value_type value_type;
61 typedef typename _Ht::hasher hasher;
62 typedef typename _Ht::key_equal key_equal;
64 typedef typename _Ht::size_type size_type;
65 typedef typename _Ht::difference_type difference_type;
66 typedef typename _Ht::pointer pointer;
67 typedef typename _Ht::const_pointer const_pointer;
68 typedef typename _Ht::reference reference;
69 typedef typename _Ht::const_reference const_reference;
71 typedef typename _Ht::iterator iterator;
72 typedef typename _Ht::const_iterator const_iterator;
74 typedef typename _Ht::allocator_type allocator_type;
76 hasher hash_funct() const { return _M_ht.hash_funct(); }
77 key_equal key_eq() const { return _M_ht.key_eq(); }
78 allocator_type get_allocator() const { return _M_ht.get_allocator(); }
83 hash_map() : _M_ht(100, hasher(), key_equal(), allocator_type()) {
86 explicit hash_map(size_type __n)
87 : _M_ht(__n, hasher(), key_equal(), allocator_type()) {
92 # ifdef _STLP_USE_TRAP_LEAVE
93 hash_map(const _Self& __o) :
96 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
98 _STLP_POP_CLEANUP_ITEM
101 hash_map(const _Self& __o)
106 hash_map(size_type __n, const hasher& __hf)
107 : _M_ht(__n, __hf, key_equal(), allocator_type()) {
110 hash_map(size_type __n, const hasher& __hf, const key_equal& __eql,
111 const allocator_type& __a = allocator_type())
112 : _M_ht(__n, __hf, __eql, __a) {
116 #ifdef _STLP_MEMBER_TEMPLATES
117 template <class _InputIterator>
118 hash_map(_InputIterator __f, _InputIterator __l)
119 : _M_ht(100, hasher(), key_equal(), allocator_type())
121 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
122 _M_ht.insert_unique(__f, __l);
123 _STLP_POP_CLEANUP_ITEM
125 template <class _InputIterator>
126 hash_map(_InputIterator __f, _InputIterator __l, size_type __n)
127 : _M_ht(__n, hasher(), key_equal(), allocator_type())
129 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
130 _M_ht.insert_unique(__f, __l);
131 _STLP_POP_CLEANUP_ITEM
133 template <class _InputIterator>
134 hash_map(_InputIterator __f, _InputIterator __l, size_type __n,
136 : _M_ht(__n, __hf, key_equal(), allocator_type())
138 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
139 _M_ht.insert_unique(__f, __l);
140 _STLP_POP_CLEANUP_ITEM
142 # ifdef _STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS
143 template <class _InputIterator>
144 hash_map(_InputIterator __f, _InputIterator __l, size_type __n,
145 const hasher& __hf, const key_equal& __eql)
146 : _M_ht(__n, __hf, __eql, allocator_type())
148 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
149 _M_ht.insert_unique(__f, __l);
150 _STLP_POP_CLEANUP_ITEM
153 template <class _InputIterator>
154 hash_map(_InputIterator __f, _InputIterator __l, size_type __n,
155 const hasher& __hf, const key_equal& __eql,
156 const allocator_type& __a _STLP_ALLOCATOR_TYPE_DFL)
157 : _M_ht(__n, __hf, __eql, __a)
159 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
160 _M_ht.insert_unique(__f, __l);
161 _STLP_POP_CLEANUP_ITEM
165 hash_map(const value_type* __f, const value_type* __l)
166 : _M_ht(100, hasher(), key_equal(), allocator_type())
168 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
169 _M_ht.insert_unique(__f, __l);
170 _STLP_POP_CLEANUP_ITEM
172 hash_map(const value_type* __f, const value_type* __l, size_type __n)
173 : _M_ht(__n, hasher(), key_equal(), allocator_type())
175 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
176 _M_ht.insert_unique(__f, __l);
177 _STLP_POP_CLEANUP_ITEM
179 hash_map(const value_type* __f, const value_type* __l, size_type __n,
181 : _M_ht(__n, __hf, key_equal(), allocator_type())
183 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
184 _M_ht.insert_unique(__f, __l);
185 _STLP_POP_CLEANUP_ITEM
187 hash_map(const value_type* __f, const value_type* __l, size_type __n,
188 const hasher& __hf, const key_equal& __eql,
189 const allocator_type& __a = allocator_type())
190 : _M_ht(__n, __hf, __eql, __a)
192 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
193 _M_ht.insert_unique(__f, __l);
194 _STLP_POP_CLEANUP_ITEM
197 hash_map(const_iterator __f, const_iterator __l)
198 : _M_ht(100, hasher(), key_equal(), allocator_type())
200 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
201 _M_ht.insert_unique(__f, __l);
202 _STLP_POP_CLEANUP_ITEM
204 hash_map(const_iterator __f, const_iterator __l, size_type __n)
205 : _M_ht(__n, hasher(), key_equal(), allocator_type())
207 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
208 _M_ht.insert_unique(__f, __l);
209 _STLP_POP_CLEANUP_ITEM
211 hash_map(const_iterator __f, const_iterator __l, size_type __n,
213 : _M_ht(__n, __hf, key_equal(), allocator_type())
215 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
216 _M_ht.insert_unique(__f, __l);
217 _STLP_POP_CLEANUP_ITEM
219 hash_map(const_iterator __f, const_iterator __l, size_type __n,
220 const hasher& __hf, const key_equal& __eql,
221 const allocator_type& __a = allocator_type())
222 : _M_ht(__n, __hf, __eql, __a)
224 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
225 _M_ht.insert_unique(__f, __l);
226 _STLP_POP_CLEANUP_ITEM
228 #endif /*_STLP_MEMBER_TEMPLATES */
230 #ifdef _STLP_USE_TRAP_LEAVE
232 static void* operator new (size_t __n, TLeave) { return _STLP_StackHelper<bool>::_NewLC(__n); }
233 static void* operator new (size_t __n) { return _STLP_StackHelper<bool>::_NewLC(__n); }
237 size_type size() const { return _M_ht.size(); }
238 size_type max_size() const { return _M_ht.max_size(); }
239 bool empty() const { return _M_ht.empty(); }
240 void swap(_Self& __hs) { _M_ht.swap(__hs._M_ht); }
241 iterator begin() { return _M_ht.begin(); }
242 iterator end() { return _M_ht.end(); }
243 const_iterator begin() const { return _M_ht.begin(); }
244 const_iterator end() const { return _M_ht.end(); }
247 pair<iterator,bool> insert(const value_type& __obj)
248 { return _M_ht.insert_unique(__obj); }
249 #ifdef _STLP_MEMBER_TEMPLATES
250 template <class _InputIterator>
251 void insert(_InputIterator __f, _InputIterator __l)
252 { _M_ht.insert_unique(__f,__l); }
254 void insert(const value_type* __f, const value_type* __l) {
255 _M_ht.insert_unique(__f,__l);
257 void insert(const_iterator __f, const_iterator __l)
258 { _M_ht.insert_unique(__f, __l); }
259 #endif /*_STLP_MEMBER_TEMPLATES */
260 pair<iterator,bool> insert_noresize(const value_type& __obj)
261 { return _M_ht.insert_unique_noresize(__obj); }
263 iterator find(const key_type& __key) { return _M_ht.find(__key); }
264 const_iterator find(const key_type& __key) const { return _M_ht.find(__key); }
266 _Tp& operator[](const key_type& __key) {
267 iterator __it = _M_ht.find(__key);
268 if (__it != _M_ht.end()) {
269 return (*__it).second ;
271 value_type __tmp(__key, __false_type());
272 _STLP_PUSH_STACK_ITEM(value_type, &__tmp)
273 return _M_ht._M_insert(__tmp).second;
277 size_type count(const key_type& __key) const { return _M_ht.count(__key); }
279 pair<iterator, iterator> equal_range(const key_type& __key)
280 { return _M_ht.equal_range(__key); }
281 pair<const_iterator, const_iterator>
282 equal_range(const key_type& __key) const
283 { return _M_ht.equal_range(__key); }
285 size_type erase(const key_type& __key) {return _M_ht.erase(__key); }
286 void erase(iterator __it) { _M_ht.erase(__it); }
287 void erase(iterator __f, iterator __l) { _M_ht.erase(__f, __l); }
288 void clear() { _M_ht.clear(); }
290 void resize(size_type __hint) { _M_ht.resize(__hint); }
291 size_type bucket_count() const { return _M_ht.bucket_count(); }
292 size_type max_bucket_count() const { return _M_ht.max_bucket_count(); }
293 size_type elems_in_bucket(size_type __n) const
294 { return _M_ht.elems_in_bucket(__n); }
295 static bool _STLP_CALL _M_equal (const _Self& __x, const _Self& __y) {
296 return _Ht::_M_equal(__x._M_ht,__y._M_ht);
300 template <class _Key, class _Tp, __DFL_TMPL_PARAM(_HashFcn,hash<_Key>),
301 __DFL_TMPL_PARAM(_EqualKey,equal_to<_Key>),
302 _STLP_DEFAULT_PAIR_ALLOCATOR_SELECT(const _Key, _Tp) >
306 typedef _STLP_HASHTABLE _Ht;
307 typedef hash_multimap<_Key, _Tp, _HashFcn, _EqualKey, _Alloc> _Self;
309 typedef typename _Ht::key_type key_type;
310 typedef _Tp data_type;
311 typedef _Tp mapped_type;
312 typedef typename _Ht::value_type _value_type;
313 typedef _value_type value_type;
314 typedef typename _Ht::hasher hasher;
315 typedef typename _Ht::key_equal key_equal;
317 typedef typename _Ht::size_type size_type;
318 typedef typename _Ht::difference_type difference_type;
319 typedef typename _Ht::pointer pointer;
320 typedef typename _Ht::const_pointer const_pointer;
321 typedef typename _Ht::reference reference;
322 typedef typename _Ht::const_reference const_reference;
324 typedef typename _Ht::iterator iterator;
325 typedef typename _Ht::const_iterator const_iterator;
327 typedef typename _Ht::allocator_type allocator_type;
329 hasher hash_funct() const { return _M_ht.hash_funct(); }
330 key_equal key_eq() const { return _M_ht.key_eq(); }
331 allocator_type get_allocator() const { return _M_ht.get_allocator(); }
336 hash_multimap() : _M_ht(100, hasher(), key_equal(), allocator_type()) {
340 # ifdef _STLP_USE_TRAP_LEAVE
341 hash_multimap(const _Self& __o) :
344 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
346 _STLP_POP_CLEANUP_ITEM
349 hash_multimap(const _Self& __o)
354 explicit hash_multimap(size_type __n)
355 : _M_ht(__n, hasher(), key_equal(), allocator_type()) {
358 hash_multimap(size_type __n, const hasher& __hf)
359 : _M_ht(__n, __hf, key_equal(), allocator_type()) {
362 hash_multimap(size_type __n, const hasher& __hf, const key_equal& __eql,
363 const allocator_type& __a = allocator_type())
364 : _M_ht(__n, __hf, __eql, __a) {
368 #ifdef _STLP_MEMBER_TEMPLATES
369 template <class _InputIterator>
370 hash_multimap(_InputIterator __f, _InputIterator __l)
371 : _M_ht(100, hasher(), key_equal(), allocator_type())
373 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
374 _M_ht.insert_equal(__f, __l);
375 _STLP_POP_CLEANUP_ITEM
377 template <class _InputIterator>
378 hash_multimap(_InputIterator __f, _InputIterator __l, size_type __n)
379 : _M_ht(__n, hasher(), key_equal(), allocator_type())
381 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
382 _M_ht.insert_equal(__f, __l);
383 _STLP_POP_CLEANUP_ITEM
385 template <class _InputIterator>
386 hash_multimap(_InputIterator __f, _InputIterator __l, size_type __n,
388 : _M_ht(__n, __hf, key_equal(), allocator_type())
390 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
391 _M_ht.insert_equal(__f, __l);
392 _STLP_POP_CLEANUP_ITEM
394 # ifdef _STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS
395 template <class _InputIterator>
396 hash_multimap(_InputIterator __f, _InputIterator __l, size_type __n,
397 const hasher& __hf, const key_equal& __eql)
398 : _M_ht(__n, __hf, __eql, allocator_type())
400 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
401 _M_ht.insert_equal(__f, __l);
402 _STLP_POP_CLEANUP_ITEM
405 template <class _InputIterator>
406 hash_multimap(_InputIterator __f, _InputIterator __l, size_type __n,
407 const hasher& __hf, const key_equal& __eql,
408 const allocator_type& __a _STLP_ALLOCATOR_TYPE_DFL)
409 : _M_ht(__n, __hf, __eql, __a)
411 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
412 _M_ht.insert_equal(__f, __l);
413 _STLP_POP_CLEANUP_ITEM
417 hash_multimap(const value_type* __f, const value_type* __l)
418 : _M_ht(100, hasher(), key_equal(), allocator_type())
420 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
421 _M_ht.insert_equal(__f, __l);
422 _STLP_POP_CLEANUP_ITEM
424 hash_multimap(const value_type* __f, const value_type* __l, size_type __n)
425 : _M_ht(__n, hasher(), key_equal(), allocator_type())
427 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
428 _M_ht.insert_equal(__f, __l);
429 _STLP_POP_CLEANUP_ITEM
431 hash_multimap(const value_type* __f, const value_type* __l, size_type __n,
433 : _M_ht(__n, __hf, key_equal(), allocator_type())
435 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
436 _M_ht.insert_equal(__f, __l);
437 _STLP_POP_CLEANUP_ITEM
439 hash_multimap(const value_type* __f, const value_type* __l, size_type __n,
440 const hasher& __hf, const key_equal& __eql,
441 const allocator_type& __a = allocator_type())
442 : _M_ht(__n, __hf, __eql, __a)
444 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
445 _M_ht.insert_equal(__f, __l);
446 _STLP_POP_CLEANUP_ITEM
449 hash_multimap(const_iterator __f, const_iterator __l)
450 : _M_ht(100, hasher(), key_equal(), allocator_type())
452 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
453 _M_ht.insert_equal(__f, __l);
454 _STLP_POP_CLEANUP_ITEM
456 hash_multimap(const_iterator __f, const_iterator __l, size_type __n)
457 : _M_ht(__n, hasher(), key_equal(), allocator_type())
459 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
460 _M_ht.insert_equal(__f, __l);
461 _STLP_POP_CLEANUP_ITEM
463 hash_multimap(const_iterator __f, const_iterator __l, size_type __n,
465 : _M_ht(__n, __hf, key_equal(), allocator_type())
467 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
468 _M_ht.insert_equal(__f, __l);
469 _STLP_POP_CLEANUP_ITEM
471 hash_multimap(const_iterator __f, const_iterator __l, size_type __n,
472 const hasher& __hf, const key_equal& __eql,
473 const allocator_type& __a = allocator_type())
474 : _M_ht(__n, __hf, __eql, __a)
476 _STLP_PUSH_CLEANUP_ITEM(_Self, this)
477 _M_ht.insert_equal(__f, __l);
478 _STLP_POP_CLEANUP_ITEM
480 #endif /*_STLP_MEMBER_TEMPLATES */
482 #ifdef _STLP_USE_TRAP_LEAVE
484 static void* operator new (size_t __n, TLeave) { return _STLP_StackHelper<bool>::_NewLC(__n); }
485 static void* operator new (size_t __n) { return _STLP_StackHelper<bool>::_NewLC(__n); }
489 size_type size() const { return _M_ht.size(); }
490 size_type max_size() const { return _M_ht.max_size(); }
491 bool empty() const { return _M_ht.empty(); }
492 void swap(_Self& __hs) { _M_ht.swap(__hs._M_ht); }
494 iterator begin() { return _M_ht.begin(); }
495 iterator end() { return _M_ht.end(); }
496 const_iterator begin() const { return _M_ht.begin(); }
497 const_iterator end() const { return _M_ht.end(); }
500 iterator insert(const value_type& __obj)
501 { return _M_ht.insert_equal(__obj); }
502 #ifdef _STLP_MEMBER_TEMPLATES
503 template <class _InputIterator>
504 void insert(_InputIterator __f, _InputIterator __l)
505 { _M_ht.insert_equal(__f,__l); }
507 void insert(const value_type* __f, const value_type* __l) {
508 _M_ht.insert_equal(__f,__l);
510 void insert(const_iterator __f, const_iterator __l)
511 { _M_ht.insert_equal(__f, __l); }
512 #endif /*_STLP_MEMBER_TEMPLATES */
513 iterator insert_noresize(const value_type& __obj)
514 { return _M_ht.insert_equal_noresize(__obj); }
516 iterator find(const key_type& __key) { return _M_ht.find(__key); }
517 const_iterator find(const key_type& __key) const
518 { return _M_ht.find(__key); }
520 size_type count(const key_type& __key) const { return _M_ht.count(__key); }
522 pair<iterator, iterator> equal_range(const key_type& __key)
523 { return _M_ht.equal_range(__key); }
524 pair<const_iterator, const_iterator>
525 equal_range(const key_type& __key) const
526 { return _M_ht.equal_range(__key); }
528 size_type erase(const key_type& __key) {return _M_ht.erase(__key); }
529 void erase(iterator __it) { _M_ht.erase(__it); }
530 void erase(iterator __f, iterator __l) { _M_ht.erase(__f, __l); }
531 void clear() { _M_ht.clear(); }
534 void resize(size_type __hint) { _M_ht.resize(__hint); }
535 size_type bucket_count() const { return _M_ht.bucket_count(); }
536 size_type max_bucket_count() const { return _M_ht.max_bucket_count(); }
537 size_type elems_in_bucket(size_type __n) const
538 { return _M_ht.elems_in_bucket(__n); }
539 static bool _STLP_CALL _M_equal (const _Self& __x, const _Self& __y) {
540 return _Ht::_M_equal(__x._M_ht,__y._M_ht);
544 #define _STLP_TEMPLATE_HEADER template <class _Key, class _Tp, class _HashFcn, class _EqlKey, class _Alloc>
545 #define _STLP_TEMPLATE_CONTAINER hash_map<_Key,_Tp,_HashFcn,_EqlKey,_Alloc>
547 #include <stl/_relops_hash_cont.h>
549 #undef _STLP_TEMPLATE_CONTAINER
550 #define _STLP_TEMPLATE_CONTAINER hash_multimap<_Key,_Tp,_HashFcn,_EqlKey,_Alloc>
551 #include <stl/_relops_hash_cont.h>
553 #undef _STLP_TEMPLATE_CONTAINER
554 #undef _STLP_TEMPLATE_HEADER
556 // Specialization of insert_iterator so that it will work for hash_map
557 // and hash_multimap.
559 #ifdef _STLP_CLASS_PARTIAL_SPECIALIZATION
561 template <class _Key, class _Tp, class _HashFn, class _EqKey, class _Alloc>
562 class insert_iterator<hash_map<_Key, _Tp, _HashFn, _EqKey, _Alloc> > {
564 typedef hash_map<_Key, _Tp, _HashFn, _EqKey, _Alloc> _Container;
565 _Container* container;
567 typedef _Container container_type;
568 typedef output_iterator_tag iterator_category;
569 typedef void value_type;
570 typedef void difference_type;
571 typedef void pointer;
572 typedef void reference;
574 insert_iterator(_Container& __x) : container(&__x) {}
575 insert_iterator(_Container& __x, typename _Container::iterator)
577 insert_iterator<_Container>&
578 operator=(const typename _Container::value_type& __val) {
579 container->insert(__val);
582 insert_iterator<_Container>& operator*() { return *this; }
583 insert_iterator<_Container>& operator++() { return *this; }
584 insert_iterator<_Container>& operator++(int) { return *this; }
587 template <class _Key, class _Tp, class _HashFn, class _EqKey, class _Alloc>
588 class insert_iterator<hash_multimap<_Key, _Tp, _HashFn, _EqKey, _Alloc> > {
590 typedef hash_multimap<_Key, _Tp, _HashFn, _EqKey, _Alloc> _Container;
591 _Container* container;
592 typename _Container::iterator iter;
594 typedef _Container container_type;
595 typedef output_iterator_tag iterator_category;
596 typedef void value_type;
597 typedef void difference_type;
598 typedef void pointer;
599 typedef void reference;
601 insert_iterator(_Container& __x) : container(&__x) {}
602 insert_iterator(_Container& __x, typename _Container::iterator)
604 insert_iterator<_Container>&
605 operator=(const typename _Container::value_type& __val) {
606 container->insert(__val);
609 insert_iterator<_Container>& operator*() { return *this; }
610 insert_iterator<_Container>& operator++() { return *this; }
611 insert_iterator<_Container>& operator++(int) { return *this; }
614 #endif /* _STLP_CLASS_PARTIAL_SPECIALIZATION */
618 # undef hash_multimap
620 # define __hash_map__ __FULL_NAME(hash_map)
621 # define __hash_multimap__ __FULL_NAME(hash_multimap)
626 # if defined (_STLP_USE_WRAPPER_FOR_ALLOC_PARAM)
627 # include <stl/wrappers/_hash_map.h>
628 # endif /* WRAPPER */
630 #endif /* _STLP_INTERNAL_HASH_MAP_H */