summaryrefslogtreecommitdiff
path: root/lib/omega/include/basic/ConstString.h
diff options
context:
space:
mode:
authorTuowen Zhao <ztuowen@gmail.com>2016-09-19 21:14:58 +0000
committerTuowen Zhao <ztuowen@gmail.com>2016-09-19 21:14:58 +0000
commit210f77d2c32f14d2e99577fd3c9842bb19d47e50 (patch)
tree5edb327c919b8309e301c3440fb6668a0075c8ef /lib/omega/include/basic/ConstString.h
parenta66ce5cd670c4d3c0dc449720f5bc45dd4c281b8 (diff)
downloadchill-210f77d2c32f14d2e99577fd3c9842bb19d47e50.tar.gz
chill-210f77d2c32f14d2e99577fd3c9842bb19d47e50.tar.bz2
chill-210f77d2c32f14d2e99577fd3c9842bb19d47e50.zip
Moved most modules into lib
Diffstat (limited to 'lib/omega/include/basic/ConstString.h')
-rw-r--r--lib/omega/include/basic/ConstString.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/lib/omega/include/basic/ConstString.h b/lib/omega/include/basic/ConstString.h
new file mode 100644
index 0000000..f149c9d
--- /dev/null
+++ b/lib/omega/include/basic/ConstString.h
@@ -0,0 +1,57 @@
+#if ! defined _Const_String_h
+#define _Const_String_h 1
+
+#include <string>
+
+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