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.
public:
IoTString(Array<char> *_array) :
array(new Array<char>(_array)),
- hashvalue(hashCharArray(array)) {
+ hashvalue(hashCharArray(array)),
+ refCount(1) {
}
IoTString(const char *_array) {
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;
}