#if ! defined _Const_String_h #define _Const_String_h 1 #include namespace omega { // should be inside Const_String, but I can't get it to // compile the hashTable when it is: hashTable can't be // global, but if it and its size are static to Const_String, // the compiler still doesn't seem to like the definition, // or the declaration either for that matter. class ConstStringRep { public: const char *name; int count; ConstStringRep *nextInBucket; ConstStringRep(const char *t); }; class Const_String { private: ConstStringRep *rep; void buildRep(const char *t); public: Const_String(); Const_String(const char* t); Const_String(const std::string &s); Const_String(const Const_String & t) {rep = t.rep;} operator int() const; int null() const; operator const char*() const; operator std::string() const; int operator++(int); int operator++(); int operator--(int); int operator--(); friend int operator==(const Const_String &x, const Const_String &y); friend int operator!=(const Const_String &x, const Const_String &y); friend int operator<(const Const_String &x, const Const_String &y); friend int operator >(const Const_String &x, const Const_String &y); }; #if defined SCREWED_UP_CASTING_RULES static int operator==(const Const_String &x, const char *y) { return x == (Const_String) y; } static int operator!=(const Const_String &x, const char *y) { return x != (Const_String) y; } #endif } // namespace #endif