#ifndef __GUT_UTIL_HXX #define __GUT_UTIL_HXX #include #include namespace gut { unsigned long hash33(const void *data, size_t size); class string_key { private: char *m_key; unsigned long m_hash; public: string_key(const char *key); string_key(const string_key &rhs); ~string_key(void); inline bool operator <(const string_key &rhs) const { if (m_hash == rhs.m_hash) { return (strcmp(m_key, rhs.m_key) < 0); } return m_hash < rhs.m_hash; } inline const char *key(void) const { return m_key; } inline const string_key &operator =(const string_key &rhs) { delete m_key; size_t len = strlen(rhs.m_key) + 1; m_key = new char[len]; memcpy(m_key, rhs.m_key, len); m_hash = hash33(m_key, len); return *this; } }; } // namespace gut #endif // __GUT_UTIL_HXX