The unified diff between revisions [9b06d7a6..] and [b43e6a50..] is displayed below. It can also be downloaded as a raw diff.
#
#
# patch "test.cc"
# from [601b75b1a52d72a222ee4d2ae83a42e8bb0605db]
# to [499b68055943d776d47fc9cc587c60b52a124475]
#
# patch "tokens.hh"
# from [ae9d9d87c06dddb9997b1fb4869b4c296c437c82]
# to [75cd224b6bc28642e53c9f04d257224165776f45]
#
# patch "tokens_test.cc"
# from [7a4d4f8cc9898703a87e8445b797e65f46e1ea74]
# to [9c0ec9ccebc6a0e1d4097cd7fc0d50352f941f71]
#
============================================================
--- test.cc 601b75b1a52d72a222ee4d2ae83a42e8bb0605db
+++ test.cc 499b68055943d776d47fc9cc587c60b52a124475
@@ -7,7 +7,7 @@ main (int argc, char *argv[])
int
main (int argc, char *argv[])
{
- __gnu_cxx::hash_map<std::string, int, string_hash<std::string> > h;
+ __gnu_cxx::hash_map<std::string, int> h;
std::string blah("test"), cat("goat");
h[blah] = 2;
============================================================
--- tokens.hh ae9d9d87c06dddb9997b1fb4869b4c296c437c82
+++ tokens.hh 75cd224b6bc28642e53c9f04d257224165776f45
@@ -7,19 +7,15 @@ typedef unsigned long int token_t;
typedef unsigned long int token_t;
-template<class T>
-class string_hash
-{
-private:
- __gnu_cxx::hash<char *> h;
-
-public:
- size_t
- operator()(const T &s) const
+namespace __gnu_cxx {
+ template <>
+ struct hash<std::string>
{
- return h (s.c_str ());
- }
-};
+ size_t
+ operator()(std::string __s) const
+ { return __gnu_cxx::hash<char *>()(__s.c_str ()); }
+ };
+}
template<class T, class H = __gnu_cxx::hash<T> >
class Tokens {
@@ -43,9 +39,8 @@ class Tokens {
tid = token_to_id[add];
if (tid == 0) {
- T our_copy = add;
- tid = token_to_id[our_copy] = ++last_id;
- id_to_token[tid] = our_copy;
+ tid = token_to_id[add] = ++last_id;
+ id_to_token[tid] = add;
}
stash.push_back (tid);
return tid;
============================================================
--- tokens_test.cc 7a4d4f8cc9898703a87e8445b797e65f46e1ea74
+++ tokens_test.cc 9c0ec9ccebc6a0e1d4097cd7fc0d50352f941f71
@@ -2,8 +2,10 @@
#include <iostream>
#include "tokens.hh"
+typedef Tokens<std::string> s_tok;
+
void
-string_test (Tokens<std::string, string_hash<std::string> > &t)
+string_test (s_tok &t)
{
std::string s;
@@ -13,7 +15,7 @@ void
}
void
-input_test (Tokens<std::string, string_hash<std::string> > &t)
+input_test (s_tok &t)
{
std::string i;
@@ -26,7 +28,7 @@ test (void)
void
test (void)
{
- Tokens<std::string, string_hash<std::string> > t;
+ s_tok t;
string_test (t);
input_test (t);