space hacks
[iotcloud.git] / version2 / src / C / IoTString.h
index 583a098a07df5aff5f663d4e8299d56c1258497a..99e45bb2f287be3ce0e4e549ca812819b8b54ea1 100644 (file)
@@ -22,8 +22,10 @@ inline unsigned int hashCharArray(Array<char> *array) {
 class IoTString {
 private:
        Array<char> *array;
-       IoTString() {}
        unsigned int hashvalue;
+       unsigned int refCount;
+  IoTString() : refCount (1) {}
+
        /**
         * Builds an IoTString object around the char array.  This
         * constructor makes a copy, so the caller is free to modify the char array.
@@ -32,7 +34,8 @@ private:
 public:
        IoTString(Array<char> *_array) :
                array(new Array<char>(_array)),
-               hashvalue(hashCharArray(array)) {
+                       hashvalue(hashCharArray(array)),
+                       refCount(1) {
        }
 
        IoTString(const char *_array) {
@@ -40,13 +43,25 @@ public:
                array = new Array<char>(len);
                memcpy(array->internalArray(), _array, len);
                hashvalue = hashCharArray(array);
+               refCount = 1;
        }
 
        IoTString(IoTString *string) :
          array(new Array<char>(string->array)),
-               hashvalue(string->hashvalue) {
+                       hashvalue(string->hashvalue),
+                       refCount(1) {
+       }
+
+       IoTString * acquireRef() {
+               refCount++;
+               return this;
        }
 
+       void releaseRef() {
+               if ((--refCount) == 0)
+                       delete this;
+       }
+       
        ~IoTString() {
                delete array;
        }