8 * IoTString wraps the underlying char string.
9 * @author Brian Demsky <bdemsky@uci.edu>
13 inline unsigned int hashCharArray(Array<char> *array) {
14 uint len = array->length();
15 unsigned int hash = 0;
16 for (uint i = 0; i < len; i++) {
17 hash = 31 * hash + ((unsigned int) array->get(i));
25 unsigned int hashvalue;
26 unsigned int refCount;
27 IoTString() : refCount (1) {}
30 * Builds an IoTString object around the char array. This
31 * constructor makes a copy, so the caller is free to modify the char array.
35 IoTString(Array<char> *_array) :
36 array(new Array<char>(_array)),
37 hashvalue(hashCharArray(array)),
41 IoTString(const char *_array) {
42 int32_t len = strlen(_array);
43 array = new Array<char>(len);
44 memcpy(array->internalArray(), _array, len);
45 hashvalue = hashCharArray(array);
49 IoTString(IoTString *string) :
50 array(new Array<char>(string->array)),
51 hashvalue(string->hashvalue),
55 IoTString * acquireRef() {
61 if ((--refCount) == 0)
70 for(uint i=0; i < array->length(); i++)
71 printf("%c", array->get(i));
74 char get(uint i) {return array->get(i);}
77 * Internal method to grab a reference to our char array. Caller
81 Array<char> *internalBytes() { return array; }
84 * Returns a copy of the underlying char string.
87 Array<char> *getBytes() { return new Array<char>(array); }
90 * Returns the length in chars of the IoTString.
94 bool equals(IoTString *str) {
95 uint strlength = str->array->length();
96 uint thislength = array->length();
97 if (strlength != thislength)
100 int result = memcmp(str->array->internalArray(), array->internalArray(), strlength);
104 unsigned int hashValue() { return hashvalue;}
105 int length() { return array->length(); }
106 friend IoTString *IoTString_shallow(Array<char> *_array);
109 inline IoTString *IoTString_shallow(Array<char> *_array) {
110 IoTString *str = new IoTString();
112 str->hashvalue = hashCharArray(_array);
116 inline unsigned int hashString(IoTString *a) {
117 return a->hashValue();
120 inline bool StringEquals(IoTString *a, IoTString *b) {