diff options
author | Tuowen Zhao <ztuowen@gmail.com> | 2016-09-17 03:22:53 +0000 |
---|---|---|
committer | Tuowen Zhao <ztuowen@gmail.com> | 2016-09-17 03:22:53 +0000 |
commit | 75ff98e4d65862ff5b36b533b4f6e3ea71ede1d5 (patch) | |
tree | 498ac06b4cf78568b807fafd2619856afff69c28 /omega/basic/src/ConstString.cc | |
parent | 29efa7b1a0d089e02a70f73f348f11878955287c (diff) | |
download | chill-75ff98e4d65862ff5b36b533b4f6e3ea71ede1d5.tar.gz chill-75ff98e4d65862ff5b36b533b4f6e3ea71ede1d5.tar.bz2 chill-75ff98e4d65862ff5b36b533b4f6e3ea71ede1d5.zip |
cmake build
Diffstat (limited to 'omega/basic/src/ConstString.cc')
-rw-r--r-- | omega/basic/src/ConstString.cc | 134 |
1 files changed, 0 insertions, 134 deletions
diff --git a/omega/basic/src/ConstString.cc b/omega/basic/src/ConstString.cc deleted file mode 100644 index 7d2ec1e..0000000 --- a/omega/basic/src/ConstString.cc +++ /dev/null @@ -1,134 +0,0 @@ -#include <basic/ConstString.h> -#include <stdlib.h> -#include <stdio.h> -#include <assert.h> -#include <string> -#include <string.h> - -/* static const int CS_HashTable_Size = 1000; */ -/* static ConstStringRep *hashTable[CS_HashTable_Size] = {0}; */ - -namespace omega { - -const int CS_HashTable_Size = 1000; -class CS_HashTable { -public: - ConstStringRep *p[CS_HashTable_Size]; - CS_HashTable(); - ~CS_HashTable(); -}; - -namespace { - CS_HashTable hashTable; -} - -CS_HashTable::CS_HashTable() { - for (int i = 0; i < CS_HashTable_Size; i++) - p[i] = NULL; - } - -CS_HashTable::~CS_HashTable() { - for (int i = 0; i < CS_HashTable_Size; i++) { - ConstStringRep *t = p[i]; - while (t != NULL) { - ConstStringRep *tt = t->nextInBucket; - delete []t->name; - delete t; - t = tt; - } - } -} - -Const_String::Const_String() { - rep = 0; -} - -void Const_String::buildRep(const char* t) { - int hash = 0; - const char *s = t; - while (*s != '\0') - hash = hash*33 + *s++; - int hashBucket = hash % CS_HashTable_Size; - if (hashBucket < 0) hashBucket += CS_HashTable_Size; - assert(0 <= hashBucket && hashBucket < CS_HashTable_Size); - ConstStringRep **q = &(hashTable.p[hashBucket]); - ConstStringRep *p = *q; - while (p != 0) { - if (strcmp(p->name,t) == 0) break; - q = &p->nextInBucket; - p = *q; - } - if (p!= 0) rep = p; - else { - rep = new ConstStringRep(t); - *q = rep; - } -} - -Const_String::Const_String(const char * t) { - buildRep(t); -} - -Const_String::Const_String(const std::string &s) { - buildRep(s.c_str()); -} - -Const_String::operator const char*() const { - if (!rep) return 0; - return rep->name; -} - -Const_String::operator std::string() const { - if (!rep) return std::string(""); - return std::string(rep->name); -} - -int Const_String::operator++(int) { - return rep->count++; -} - -int Const_String::operator++() { - return ++rep->count; -} - -int Const_String:: operator--(int) { - return rep->count--; -} - -int Const_String:: operator--() { - return --rep->count; -} - -int operator ==(const Const_String &x, const Const_String &y) { - return x.rep == y.rep; -} - -int operator !=(const Const_String &x, const Const_String &y) { - return x.rep != y.rep; -} - -int operator <(const Const_String &x, const Const_String &y) { - return (strcmp(x.rep->name,y.rep->name) < 0); -} - -int operator >(const Const_String &x, const Const_String &y) { - return (strcmp(x.rep->name,y.rep->name) > 0); -} - -Const_String:: operator int() const { - return rep != 0; -} - -int Const_String::null() const { - return rep == 0; -} - -ConstStringRep:: ConstStringRep(const char *t) { - count = 0; - nextInBucket = 0; - char *s = new char[1+strlen(t)]; - strcpy(s,t); - name = s; -} - -} // namespace |