* @version 1.0
*/
+inline int hashCharArray(Array<char> * array) {
+ uint len = array->length();
+ int hash=0;
+ for(uint i=0; i <len; i++) {
+ hash = 31 * hash + array->get(i);
+ }
+ return hash;
+}
+
class IoTString {
private:
Array<char> *array;
IoTString() {}
-
+ int hashvalue;
/**
* 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)) {}
+ IoTString(Array<char> *_array) :
+ array(new Array<char>(_array)),
+ hashvalue(hashCharArray(array)) {
+ }
IoTString(const char *_array) {
int32_t len = strlen(_array);
array = new Array<char>(len);
strcpy(array->internalArray(), _array);
+ hashvalue=hashCharArray(array);
}
- IoTString(IoTString *string) : array(new Array<char>(string->array)) {
+ IoTString(IoTString *string) :
+ array(new Array<char>(string->array)),
+ hashvalue(hashCharArray(array)) {
}
~IoTString() {
return result == 0;
}
+ int hashValue() { return hashvalue;}
int length() { return array->length(); }
friend IoTString *IoTString_shallow(Array<char> *_array);
};
str->array = _array;
return str;
}
+
+inline int hashString(IoTString *a) {
+ return a->hashValue();
+}
+
+inline bool StringEquals(IoTString *a, IoTString *b) {
+ return a->equals(b);
+}
#endif