This is the mail archive of the libstdc++@sourceware.cygnus.com mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

re: Basic Question on using libstdc++-v3


I reinstalled the libstdc++-2.90.6.1 as follows:

mkdir bld-libstdc++
cd bld-libstdc++
../libstdc++2.90.6.1/configure --prifix=/usr/local/H-libstdc++-v3
make 

then I logged on as root
and did a
make install

both make check and make check-install passes (except for repeated 
messages as follows:

../libstdc++-2.90.6.1/mkcheck: [: %s: integer expression expected
size: illegal option -- A
usage: size [-VoxnfF] file(s)...
size: illegal option -- A
usage: size [-VoxnfF] file(s)...
size: illegal option -- A
usage: size [-VoxnfF] file(s)...)

But I still get the same error messsages as before.  I used -v -H this time.   I 
I am attaching the following files (1) toy program (2) compile error messages
including command line (3) listing of the header file where the error occurs
(viz., /usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map) (It is curious
that the above file which is included in my program has the following
line stating:

/* NOTE: This is an internal header file, included by other STL headers.
 *   You should not attempt to use it directly.
 */)
 
 Is it possible that this hash_map should in fact be hash_map.h and there
 should be another file hash_map which includes this hash_map.h after defining
 the macros?
 
Any help in compiling this file is much appreciated.

Meenan Vishnu

#include <ext/hash_map>
#include <iostream>

static const int N = 100;

struct X
  {
    int a;
    int b;
  };

int main()
  {
    std::hash_map<int, X> hm;

    for( int i = 0; i < N; ++i )
      {
        X x;
        x.a = N-i;
        x.b = 3*i;
        hm[ i ] = x;
      }

    for( int i = 0; i < N; ++i )
      {
        std::cout << hm[ i ].a << " - " << hm[ i ].b << std::endl;
      }
  }
/usr/local/bin/g++ -g -Wall -ftemplate-depth-25 -static -I/usr/local/H-libstdc++-v3/include/g++-v3  -L/usr/local/H-libstdc++-v3/lib -o test_hm test_hm.cc
In file included from test_hm.cc:1:
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:44: syntax error before `template'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:51: parse error before `&'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:52: `operator ==(...)' must have an argument of class or enumerated type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:52: `operator ==(...)' must take exactly two arguments
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:59: parse error before `,'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:61: syntax error before `;'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:64: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:64: `key_type' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:64: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:64: ANSI C++ forbids declaration `key_type' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:67: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:67: `value_type' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:67: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:67: ANSI C++ forbids declaration `value_type' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:68: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:68: `hasher' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:68: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:68: ANSI C++ forbids declaration `hasher' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:69: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:69: `key_equal' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:69: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:69: ANSI C++ forbids declaration `key_equal' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:71: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:71: `size_type' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:71: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:71: ANSI C++ forbids declaration `size_type' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:72: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:72: `difference_type' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:72: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:72: ANSI C++ forbids declaration `difference_type' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:73: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:73: `pointer' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:73: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:73: ANSI C++ forbids declaration `pointer' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:74: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:74: `const_pointer' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:74: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:74: ANSI C++ forbids declaration `const_pointer' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:75: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:75: `reference' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:75: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:75: ANSI C++ forbids declaration `reference' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:76: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:76: `const_reference' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:76: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:76: ANSI C++ forbids declaration `const_reference' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:78: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:78: `iterator' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:78: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:78: ANSI C++ forbids declaration `iterator' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:79: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:79: `const_iterator' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:79: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:79: ANSI C++ forbids declaration `const_iterator' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:81: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:81: `allocator_type' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:81: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:81: ANSI C++ forbids declaration `allocator_type' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:164: `__STD_QUALIFIER' is neither function nor method; cannot be declared friend
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:164: parse error before `operator'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:174: syntax error before `('
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:181: semicolon missing after declaration of `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: In method `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>::hash_map()':
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:88: class `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>' does not have any field named `_M_ht'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: In method `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>::hash_map(int)':
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:90: class `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>' does not have any field named `_M_ht'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: In method `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>::hash_map(int, const int &)':
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:92: class `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>' does not have any field named `_M_ht'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: In method `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>::hash_map(int, const int &, const int &, const int & = int())':
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:95: class `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>' does not have any field named `_M_ht'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: In method `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>::hash_map(const int *, const int *)':
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:120: class `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>' does not have any field named `_M_ht'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: In method `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>::hash_map(const int *, const int *, int)':
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:123: class `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>' does not have any field named `_M_ht'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: In method `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>::hash_map(const int *, const int *, int, const int &)':
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:127: class `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>' does not have any field named `_M_ht'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: In method `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>::hash_map(const int *, const int *, int, const int &, const int &, const int & = int())':
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:132: class `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>' does not have any field named `_M_ht'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: In method `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>::hash_map(int, int)':
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:136: class `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>' does not have any field named `_M_ht'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: In method `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>::hash_map(int, int, int)':
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:139: class `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>' does not have any field named `_M_ht'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: In method `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>::hash_map(int, int, int, const int &)':
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:143: class `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>' does not have any field named `_M_ht'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: In method `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>::hash_map(int, int, int, const int &, const int &, const int & = int())':
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:148: class `hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>' does not have any field named `_M_ht'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: At top level:
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:181: parse error before `*'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:181: two or more data types in declaration of `insert'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:181: semicolon missing after declaration of `class hash_map<_Key,_Tp,_HashFcn,_EqualKey,_Alloc>'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:184: `const_iterator' was not declared in this scope
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:184: parse error before `,'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: In function `void insert(...)':
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:185: `_M_ht' undeclared (first use this function)
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:185: (Each undeclared identifier is reported only once
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:185: for each function it appears in.)
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:185: `__f' undeclared (first use this function)
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:185: `__l' undeclared (first use this function)
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: At top level:
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:187: `iterator' was not declared in this scope
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:187: syntax error before `('
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:190: syntax error before `('
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:191: syntax error before `('
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:194: syntax error before `&'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:198: syntax error before `('
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:200: `iterator' was not declared in this scope
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:200: `iterator' was not declared in this scope
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:200: syntax error before `('
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:202: `const_iterator' was not declared in this scope
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:202: `const_iterator' was not declared in this scope
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:203: syntax error before `('
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:206: syntax error before `('
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:207: `iterator' was not declared in this scope
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:207: parse error before `)'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: In function `void erase(...)':
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:207: `__it' undeclared (first use this function)
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: At top level:
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:208: parse error before `,'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: In function `void erase(...)':
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:208: redefinition of `void erase(...)'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:207: `void erase(...)' previously defined here
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: At top level:
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:211: `size_type' was not declared in this scope
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:211: parse error before `)'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: In function `void resize(...)':
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:211: `__hint' undeclared (first use this function)
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: At top level:
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:212: syntax error before `('
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:213: syntax error before `('
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:214: syntax error before `('
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:248: `hash' was not declared in this scope
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:248: parse error before `>'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:249: `equal_to' was not declared in this scope
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:249: parse error before `>'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:249: conflicting types for `class _EqualKey (* __STL_DEPENDENT_DEFAULT_TMPL)(...)'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:248: previous declaration as `class _HashFcn (* __STL_DEPENDENT_DEFAULT_TMPL)(...)'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:250: parse error before `('
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:255: parse error before `&'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:256: `operator ==(...)' must have an argument of class or enumerated type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:256: `operator ==(...)' must take exactly two arguments
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:263: parse error before `,'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:266: syntax error before `;'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:269: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:269: `key_type' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:269: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:269: ANSI C++ forbids declaration `key_type' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:269: invalid member template declaration `hash_multimap::key_type'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:270: invalid member template declaration `hash_multimap::data_type'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:271: invalid member template declaration `hash_multimap::mapped_type'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:272: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:272: `value_type' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:272: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:272: ANSI C++ forbids declaration `value_type' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:272: invalid member template declaration `hash_multimap::value_type'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:273: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:273: `hasher' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:273: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:273: ANSI C++ forbids declaration `hasher' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:273: invalid member template declaration `hash_multimap::hasher'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:274: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:274: `key_equal' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:274: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:274: ANSI C++ forbids declaration `key_equal' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:274: invalid member template declaration `hash_multimap::key_equal'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:276: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:276: `size_type' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:276: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:276: ANSI C++ forbids declaration `size_type' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:276: invalid member template declaration `hash_multimap::size_type'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:277: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:277: `difference_type' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:277: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:277: ANSI C++ forbids declaration `difference_type' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:277: invalid member template declaration `hash_multimap::difference_type'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:278: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:278: `pointer' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:278: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:278: ANSI C++ forbids declaration `pointer' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:278: invalid member template declaration `hash_multimap::pointer'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:279: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:279: `const_pointer' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:279: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:279: ANSI C++ forbids declaration `const_pointer' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:279: invalid member template declaration `hash_multimap::const_pointer'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:280: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:280: `reference' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:280: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:280: ANSI C++ forbids declaration `reference' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:280: invalid member template declaration `hash_multimap::reference'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:281: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:281: `const_reference' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:281: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:281: ANSI C++ forbids declaration `const_reference' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:281: invalid member template declaration `hash_multimap::const_reference'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:283: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:283: `iterator' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:283: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:283: ANSI C++ forbids declaration `iterator' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:283: invalid member template declaration `hash_multimap::iterator'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:284: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:284: `const_iterator' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:284: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:284: ANSI C++ forbids declaration `const_iterator' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:284: invalid member template declaration `hash_multimap::const_iterator'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:286: `_Ht' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:286: `allocator_type' is not a class or namespace
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:286: `_Ht' fails to be a typedef or built in type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:286: ANSI C++ forbids declaration `allocator_type' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:286: invalid member template declaration `hash_multimap::allocator_type'
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:288: syntax error before `('
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:289: syntax error before `('
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:289: ANSI C++ forbids declaration `key_eq' with no type
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:289: non-member function `key_eq()' cannot have `const' method qualifier
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map: In function `int key_eq()':
/usr/local/H-libstdc++-v3/include/g++-v3/ext/hash_map:289: confused by earlier errors, bailing out
make: *** [test_hm] Error 1



/*
 * Copyright (c) 1996
 * Silicon Graphics Computer Systems, Inc.
 *
 * Permission to use, copy, modify, distribute and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appear in all copies and
 * that both that copyright notice and this permission notice appear
 * in supporting documentation.  Silicon Graphics makes no
 * representations about the suitability of this software for any
 * purpose.  It is provided "as is" without express or implied warranty.
 *
 *
 * Copyright (c) 1994
 * Hewlett-Packard Company
 *
 * Permission to use, copy, modify, distribute and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appear in all copies and
 * that both that copyright notice and this permission notice appear
 * in supporting documentation.  Hewlett-Packard Company makes no
 * representations about the suitability of this software for any
 * purpose.  It is provided "as is" without express or implied warranty.
 *
 */

/* NOTE: This is an internal header file, included by other STL headers.
 *   You should not attempt to use it directly.
 */

#ifndef __SGI_STL_INTERNAL_HASH_MAP_H
#define __SGI_STL_INTERNAL_HASH_MAP_H


__STL_BEGIN_NAMESPACE

#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
#pragma set woff 1174
#pragma set woff 1375
#endif

// Forward declaration of equality operator; needed for friend declaration.

template <class _Key, class _Tp,
          class _HashFcn  __STL_DEPENDENT_DEFAULT_TMPL(hash<_Key>),
          class _EqualKey __STL_DEPENDENT_DEFAULT_TMPL(equal_to<_Key>),
          class _Alloc =  __STL_DEFAULT_ALLOCATOR(_Tp) >
class hash_map;

template <class _Key, class _Tp, class _HashFn, class _EqKey, class _Alloc>
inline bool operator==(const hash_map<_Key, _Tp, _HashFn, _EqKey, _Alloc>&,
                       const hash_map<_Key, _Tp, _HashFn, _EqKey, _Alloc>&);

template <class _Key, class _Tp, class _HashFcn, class _EqualKey,
          class _Alloc>
class hash_map
{
private:
  typedef hashtable<pair<const _Key,_Tp>,_Key,_HashFcn,
                    _Select1st<pair<const _Key,_Tp> >,_EqualKey,_Alloc> _Ht;
  _Ht _M_ht;

public:
  typedef typename _Ht::key_type key_type;
  typedef _Tp data_type;
  typedef _Tp mapped_type;
  typedef typename _Ht::value_type value_type;
  typedef typename _Ht::hasher hasher;
  typedef typename _Ht::key_equal key_equal;
  
  typedef typename _Ht::size_type size_type;
  typedef typename _Ht::difference_type difference_type;
  typedef typename _Ht::pointer pointer;
  typedef typename _Ht::const_pointer const_pointer;
  typedef typename _Ht::reference reference;
  typedef typename _Ht::const_reference const_reference;

  typedef typename _Ht::iterator iterator;
  typedef typename _Ht::const_iterator const_iterator;

  typedef typename _Ht::allocator_type allocator_type;

  hasher hash_funct() const { return _M_ht.hash_funct(); }
  key_equal key_eq() const { return _M_ht.key_eq(); }
  allocator_type get_allocator() const { return _M_ht.get_allocator(); }

public:
  hash_map() : _M_ht(100, hasher(), key_equal(), allocator_type()) {}
  explicit hash_map(size_type __n)
    : _M_ht(__n, hasher(), key_equal(), allocator_type()) {}
  hash_map(size_type __n, const hasher& __hf)
    : _M_ht(__n, __hf, key_equal(), allocator_type()) {}
  hash_map(size_type __n, const hasher& __hf, const key_equal& __eql,
           const allocator_type& __a = allocator_type())
    : _M_ht(__n, __hf, __eql, __a) {}

#ifdef __STL_MEMBER_TEMPLATES
  template <class _InputIterator>
  hash_map(_InputIterator __f, _InputIterator __l)
    : _M_ht(100, hasher(), key_equal(), allocator_type())
    { _M_ht.insert_unique(__f, __l); }
  template <class _InputIterator>
  hash_map(_InputIterator __f, _InputIterator __l, size_type __n)
    : _M_ht(__n, hasher(), key_equal(), allocator_type())
    { _M_ht.insert_unique(__f, __l); }
  template <class _InputIterator>
  hash_map(_InputIterator __f, _InputIterator __l, size_type __n,
           const hasher& __hf)
    : _M_ht(__n, __hf, key_equal(), allocator_type())
    { _M_ht.insert_unique(__f, __l); }
  template <class _InputIterator>
  hash_map(_InputIterator __f, _InputIterator __l, size_type __n,
           const hasher& __hf, const key_equal& __eql,
           const allocator_type& __a = allocator_type())
    : _M_ht(__n, __hf, __eql, __a)
    { _M_ht.insert_unique(__f, __l); }

#else
  hash_map(const value_type* __f, const value_type* __l)
    : _M_ht(100, hasher(), key_equal(), allocator_type())
    { _M_ht.insert_unique(__f, __l); }
  hash_map(const value_type* __f, const value_type* __l, size_type __n)
    : _M_ht(__n, hasher(), key_equal(), allocator_type())
    { _M_ht.insert_unique(__f, __l); }
  hash_map(const value_type* __f, const value_type* __l, size_type __n,
           const hasher& __hf)
    : _M_ht(__n, __hf, key_equal(), allocator_type())
    { _M_ht.insert_unique(__f, __l); }
  hash_map(const value_type* __f, const value_type* __l, size_type __n,
           const hasher& __hf, const key_equal& __eql,
           const allocator_type& __a = allocator_type())
    : _M_ht(__n, __hf, __eql, __a)
    { _M_ht.insert_unique(__f, __l); }

  hash_map(const_iterator __f, const_iterator __l)
    : _M_ht(100, hasher(), key_equal(), allocator_type())
    { _M_ht.insert_unique(__f, __l); }
  hash_map(const_iterator __f, const_iterator __l, size_type __n)
    : _M_ht(__n, hasher(), key_equal(), allocator_type())
    { _M_ht.insert_unique(__f, __l); }
  hash_map(const_iterator __f, const_iterator __l, size_type __n,
           const hasher& __hf)
    : _M_ht(__n, __hf, key_equal(), allocator_type())
    { _M_ht.insert_unique(__f, __l); }
  hash_map(const_iterator __f, const_iterator __l, size_type __n,
           const hasher& __hf, const key_equal& __eql,
           const allocator_type& __a = allocator_type())
    : _M_ht(__n, __hf, __eql, __a)
    { _M_ht.insert_unique(__f, __l); }
#endif /*__STL_MEMBER_TEMPLATES */

public:
  size_type size() const { return _M_ht.size(); }
  size_type max_size() const { return _M_ht.max_size(); }
  bool empty() const { return _M_ht.empty(); }
  void swap(hash_map& __hs) { _M_ht.swap(__hs._M_ht); }

#ifdef __STL_MEMBER_TEMPLATES
  template <class _K1, class _T1, class _HF, class _EqK, class _Al>
  friend bool operator== (const hash_map<_K1, _T1, _HF, _EqK, _Al>&,
                          const hash_map<_K1, _T1, _HF, _EqK, _Al>&);
#else /* __STL_MEMBER_TEMPLATES */
  friend bool __STD_QUALIFIER
  operator== __STL_NULL_TMPL_ARGS (const hash_map&, const hash_map&);
#endif /* __STL_MEMBER_TEMPLATES */


  iterator begin() { return _M_ht.begin(); }
  iterator end() { return _M_ht.end(); }
  const_iterator begin() const { return _M_ht.begin(); }
  const_iterator end() const { return _M_ht.end(); }

public:
  pair<iterator,bool> insert(const value_type& __obj)
    { return _M_ht.insert_unique(__obj); }
#ifdef __STL_MEMBER_TEMPLATES
  template <class _InputIterator>
  void insert(_InputIterator __f, _InputIterator __l)
    { _M_ht.insert_unique(__f,__l); }
#else
  void insert(const value_type* __f, const value_type* __l) {
    _M_ht.insert_unique(__f,__l);
  }
  void insert(const_iterator __f, const_iterator __l)
    { _M_ht.insert_unique(__f, __l); }
#endif /*__STL_MEMBER_TEMPLATES */
  pair<iterator,bool> insert_noresize(const value_type& __obj)
    { return _M_ht.insert_unique_noresize(__obj); }    

  iterator find(const key_type& __key) { return _M_ht.find(__key); }
  const_iterator find(const key_type& __key) const 
    { return _M_ht.find(__key); }

  _Tp& operator[](const key_type& __key) {
    return _M_ht.find_or_insert(value_type(__key, _Tp())).second;
  }

  size_type count(const key_type& __key) const { return _M_ht.count(__key); }
  
  pair<iterator, iterator> equal_range(const key_type& __key)
    { return _M_ht.equal_range(__key); }
  pair<const_iterator, const_iterator>
  equal_range(const key_type& __key) const
    { return _M_ht.equal_range(__key); }

  size_type erase(const key_type& __key) {return _M_ht.erase(__key); }
  void erase(iterator __it) { _M_ht.erase(__it); }
  void erase(iterator __f, iterator __l) { _M_ht.erase(__f, __l); }
  void clear() { _M_ht.clear(); }

  void resize(size_type __hint) { _M_ht.resize(__hint); }
  size_type bucket_count() const { return _M_ht.bucket_count(); }
  size_type max_bucket_count() const { return _M_ht.max_bucket_count(); }
  size_type elems_in_bucket(size_type __n) const
    { return _M_ht.elems_in_bucket(__n); }
};

template <class _Key, class _Tp, class _HashFcn, class _EqlKey, class _Alloc>
inline bool 
operator==(const hash_map<_Key,_Tp,_HashFcn,_EqlKey,_Alloc>& __hm1,
           const hash_map<_Key,_Tp,_HashFcn,_EqlKey,_Alloc>& __hm2)
{
  return __hm1._M_ht == __hm2._M_ht;
}

#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER

template <class _Key, class _Tp, class _HashFcn, class _EqlKey, class _Alloc>
inline bool 
operator!=(const hash_map<_Key,_Tp,_HashFcn,_EqlKey,_Alloc>& __hm1,
           const hash_map<_Key,_Tp,_HashFcn,_EqlKey,_Alloc>& __hm2) {
  return !(__hm1 == __hm2);
}

template <class _Key, class _Tp, class _HashFcn, class _EqlKey, class _Alloc>
inline void 
swap(hash_map<_Key,_Tp,_HashFcn,_EqlKey,_Alloc>& __hm1,
     hash_map<_Key,_Tp,_HashFcn,_EqlKey,_Alloc>& __hm2)
{
  __hm1.swap(__hm2);
}

#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */

// Forward declaration of equality operator; needed for friend declaration.

template <class _Key, class _Tp,
          class _HashFcn  __STL_DEPENDENT_DEFAULT_TMPL(hash<_Key>),
          class _EqualKey __STL_DEPENDENT_DEFAULT_TMPL(equal_to<_Key>),
          class _Alloc =  __STL_DEFAULT_ALLOCATOR(_Tp) >
class hash_multimap;

template <class _Key, class _Tp, class _HF, class _EqKey, class _Alloc>
inline bool 
operator==(const hash_multimap<_Key,_Tp,_HF,_EqKey,_Alloc>& __hm1,
           const hash_multimap<_Key,_Tp,_HF,_EqKey,_Alloc>& __hm2);

template <class _Key, class _Tp, class _HashFcn, class _EqualKey, 
          class _Alloc>
class hash_multimap
{
private:
  typedef hashtable<pair<const _Key, _Tp>, _Key, _HashFcn,
                    _Select1st<pair<const _Key, _Tp> >, _EqualKey, _Alloc> 
          _Ht;
  _Ht _M_ht;

public:
  typedef typename _Ht::key_type key_type;
  typedef _Tp data_type;
  typedef _Tp mapped_type;
  typedef typename _Ht::value_type value_type;
  typedef typename _Ht::hasher hasher;
  typedef typename _Ht::key_equal key_equal;

  typedef typename _Ht::size_type size_type;
  typedef typename _Ht::difference_type difference_type;
  typedef typename _Ht::pointer pointer;
  typedef typename _Ht::const_pointer const_pointer;
  typedef typename _Ht::reference reference;
  typedef typename _Ht::const_reference const_reference;

  typedef typename _Ht::iterator iterator;
  typedef typename _Ht::const_iterator const_iterator;

  typedef typename _Ht::allocator_type allocator_type;

  hasher hash_funct() const { return _M_ht.hash_funct(); }
  key_equal key_eq() const { return _M_ht.key_eq(); }
  allocator_type get_allocator() const { return _M_ht.get_allocator(); }

public:
  hash_multimap() : _M_ht(100, hasher(), key_equal(), allocator_type()) {}
  explicit hash_multimap(size_type __n)
    : _M_ht(__n, hasher(), key_equal(), allocator_type()) {}
  hash_multimap(size_type __n, const hasher& __hf)
    : _M_ht(__n, __hf, key_equal(), allocator_type()) {}
  hash_multimap(size_type __n, const hasher& __hf, const key_equal& __eql,
                const allocator_type& __a = allocator_type())
    : _M_ht(__n, __hf, __eql, __a) {}

#ifdef __STL_MEMBER_TEMPLATES
  template <class _InputIterator>
  hash_multimap(_InputIterator __f, _InputIterator __l)
    : _M_ht(100, hasher(), key_equal(), allocator_type())
    { _M_ht.insert_equal(__f, __l); }
  template <class _InputIterator>
  hash_multimap(_InputIterator __f, _InputIterator __l, size_type __n)
    : _M_ht(__n, hasher(), key_equal(), allocator_type())
    { _M_ht.insert_equal(__f, __l); }
  template <class _InputIterator>
  hash_multimap(_InputIterator __f, _InputIterator __l, size_type __n,
                const hasher& __hf)
    : _M_ht(__n, __hf, key_equal(), allocator_type())
    { _M_ht.insert_equal(__f, __l); }
  template <class _InputIterator>
  hash_multimap(_InputIterator __f, _InputIterator __l, size_type __n,
                const hasher& __hf, const key_equal& __eql,
                const allocator_type& __a = allocator_type())
    : _M_ht(__n, __hf, __eql, __a)
    { _M_ht.insert_equal(__f, __l); }

#else
  hash_multimap(const value_type* __f, const value_type* __l)
    : _M_ht(100, hasher(), key_equal(), allocator_type())
    { _M_ht.insert_equal(__f, __l); }
  hash_multimap(const value_type* __f, const value_type* __l, size_type __n)
    : _M_ht(__n, hasher(), key_equal(), allocator_type())
    { _M_ht.insert_equal(__f, __l); }
  hash_multimap(const value_type* __f, const value_type* __l, size_type __n,
                const hasher& __hf)
    : _M_ht(__n, __hf, key_equal(), allocator_type())
    { _M_ht.insert_equal(__f, __l); }
  hash_multimap(const value_type* __f, const value_type* __l, size_type __n,
                const hasher& __hf, const key_equal& __eql,
                const allocator_type& __a = allocator_type())
    : _M_ht(__n, __hf, __eql, __a)
    { _M_ht.insert_equal(__f, __l); }

  hash_multimap(const_iterator __f, const_iterator __l)
    : _M_ht(100, hasher(), key_equal(), allocator_type())
    { _M_ht.insert_equal(__f, __l); }
  hash_multimap(const_iterator __f, const_iterator __l, size_type __n)
    : _M_ht(__n, hasher(), key_equal(), allocator_type())
    { _M_ht.insert_equal(__f, __l); }
  hash_multimap(const_iterator __f, const_iterator __l, size_type __n,
                const hasher& __hf)
    : _M_ht(__n, __hf, key_equal(), allocator_type())
    { _M_ht.insert_equal(__f, __l); }
  hash_multimap(const_iterator __f, const_iterator __l, size_type __n,
                const hasher& __hf, const key_equal& __eql,
                const allocator_type& __a = allocator_type())
    : _M_ht(__n, __hf, __eql, __a)
    { _M_ht.insert_equal(__f, __l); }
#endif /*__STL_MEMBER_TEMPLATES */

public:
  size_type size() const { return _M_ht.size(); }
  size_type max_size() const { return _M_ht.max_size(); }
  bool empty() const { return _M_ht.empty(); }
  void swap(hash_multimap& __hs) { _M_ht.swap(__hs._M_ht); }

#ifdef __STL_MEMBER_TEMPLATES
  template <class _K1, class _T1, class _HF, class _EqK, class _Al>
  friend bool operator== (const hash_multimap<_K1, _T1, _HF, _EqK, _Al>&,
                          const hash_multimap<_K1, _T1, _HF, _EqK, _Al>&);
#else /* __STL_MEMBER_TEMPLATES */
  friend bool __STD_QUALIFIER
  operator== __STL_NULL_TMPL_ARGS (const hash_multimap&,const hash_multimap&);
#endif /* __STL_MEMBER_TEMPLATES */

  iterator begin() { return _M_ht.begin(); }
  iterator end() { return _M_ht.end(); }
  const_iterator begin() const { return _M_ht.begin(); }
  const_iterator end() const { return _M_ht.end(); }

public:
  iterator insert(const value_type& __obj) 
    { return _M_ht.insert_equal(__obj); }
#ifdef __STL_MEMBER_TEMPLATES
  template <class _InputIterator>
  void insert(_InputIterator __f, _InputIterator __l) 
    { _M_ht.insert_equal(__f,__l); }
#else
  void insert(const value_type* __f, const value_type* __l) {
    _M_ht.insert_equal(__f,__l);
  }
  void insert(const_iterator __f, const_iterator __l) 
    { _M_ht.insert_equal(__f, __l); }
#endif /*__STL_MEMBER_TEMPLATES */
  iterator insert_noresize(const value_type& __obj)
    { return _M_ht.insert_equal_noresize(__obj); }    

  iterator find(const key_type& __key) { return _M_ht.find(__key); }
  const_iterator find(const key_type& __key) const 
    { return _M_ht.find(__key); }

  size_type count(const key_type& __key) const { return _M_ht.count(__key); }
  
  pair<iterator, iterator> equal_range(const key_type& __key)
    { return _M_ht.equal_range(__key); }
  pair<const_iterator, const_iterator>
  equal_range(const key_type& __key) const
    { return _M_ht.equal_range(__key); }

  size_type erase(const key_type& __key) {return _M_ht.erase(__key); }
  void erase(iterator __it) { _M_ht.erase(__it); }
  void erase(iterator __f, iterator __l) { _M_ht.erase(__f, __l); }
  void clear() { _M_ht.clear(); }

public:
  void resize(size_type __hint) { _M_ht.resize(__hint); }
  size_type bucket_count() const { return _M_ht.bucket_count(); }
  size_type max_bucket_count() const { return _M_ht.max_bucket_count(); }
  size_type elems_in_bucket(size_type __n) const
    { return _M_ht.elems_in_bucket(__n); }
};

template <class _Key, class _Tp, class _HF, class _EqKey, class _Alloc>
inline bool 
operator==(const hash_multimap<_Key,_Tp,_HF,_EqKey,_Alloc>& __hm1,
           const hash_multimap<_Key,_Tp,_HF,_EqKey,_Alloc>& __hm2)
{
  return __hm1._M_ht == __hm2._M_ht;
}

#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER

template <class _Key, class _Tp, class _HF, class _EqKey, class _Alloc>
inline bool 
operator!=(const hash_multimap<_Key,_Tp,_HF,_EqKey,_Alloc>& __hm1,
           const hash_multimap<_Key,_Tp,_HF,_EqKey,_Alloc>& __hm2) {
  return !(__hm1 == __hm2);
}

template <class _Key, class _Tp, class _HashFcn, class _EqlKey, class _Alloc>
inline void 
swap(hash_multimap<_Key,_Tp,_HashFcn,_EqlKey,_Alloc>& __hm1,
     hash_multimap<_Key,_Tp,_HashFcn,_EqlKey,_Alloc>& __hm2)
{
  __hm1.swap(__hm2);
}

#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */

// Specialization of insert_iterator so that it will work for hash_map
// and hash_multimap.

#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION

template <class _Key, class _Tp, class _HashFn,  class _EqKey, class _Alloc>
class insert_iterator<hash_map<_Key, _Tp, _HashFn, _EqKey, _Alloc> > {
protected:
  typedef hash_map<_Key, _Tp, _HashFn, _EqKey, _Alloc> _Container;
  _Container* container;
public:
  typedef _Container          container_type;
  typedef output_iterator_tag iterator_category;
  typedef void                value_type;
  typedef void                difference_type;
  typedef void                pointer;
  typedef void                reference;

  insert_iterator(_Container& __x) : container(&__x) {}
  insert_iterator(_Container& __x, typename _Container::iterator)
    : container(&__x) {}
  insert_iterator<_Container>&
  operator=(const typename _Container::value_type& __value) { 
    container->insert(__value);
    return *this;
  }
  insert_iterator<_Container>& operator*() { return *this; }
  insert_iterator<_Container>& operator++() { return *this; }
  insert_iterator<_Container>& operator++(int) { return *this; }
};

template <class _Key, class _Tp, class _HashFn,  class _EqKey, class _Alloc>
class insert_iterator<hash_multimap<_Key, _Tp, _HashFn, _EqKey, _Alloc> > {
protected:
  typedef hash_multimap<_Key, _Tp, _HashFn, _EqKey, _Alloc> _Container;
  _Container* container;
  typename _Container::iterator iter;
public:
  typedef _Container          container_type;
  typedef output_iterator_tag iterator_category;
  typedef void                value_type;
  typedef void                difference_type;
  typedef void                pointer;
  typedef void                reference;

  insert_iterator(_Container& __x) : container(&__x) {}
  insert_iterator(_Container& __x, typename _Container::iterator)
    : container(&__x) {}
  insert_iterator<_Container>&
  operator=(const typename _Container::value_type& __value) { 
    container->insert(__value);
    return *this;
  }
  insert_iterator<_Container>& operator*() { return *this; }
  insert_iterator<_Container>& operator++() { return *this; }
  insert_iterator<_Container>& operator++(int) { return *this; }
};

#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */

#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
#pragma reset woff 1174
#pragma reset woff 1375
#endif

__STL_END_NAMESPACE

#endif /* __SGI_STL_INTERNAL_HASH_MAP_H */

// Local Variables:
// mode:C++
// End:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]