+ /** Override: new operator */
+ void * operator new(size_t size) {
+ return _malloc(size);
+ }
+
+ /** Override: delete operator */
+ void operator delete(void *p, size_t size) {
+ _free(p);
+ }
+
+ /** Override: new[] operator */
+ void * operator new[](size_t size) {
+ return _malloc(size);
+ }
+
+ /** Override: delete[] operator */
+ void operator delete[](void *p, size_t size) {
+ _free(p);
+ }
+
+ /** @brief Reset the table to its initial state. */
+ void reset() {
+ memset(table, 0, capacity * sizeof(struct hashlistnode<_Key, _Val>));
+ size = 0;
+ }
+
+ /**
+ * @brief Put a key/value pair into the table
+ * @param key The key for the new value; must not be 0 or NULL
+ * @param val The value to store in the table
+ */
+ void put(_Key key, _Val val) {
+ /* HashTable cannot handle 0 as a key */
+ ASSERT(key);
+
+ if (size > threshold)
+ resize(capacity << 1);
+
+ struct hashlistnode<_Key, _Val> *search;
+
+ unsigned int index = ((_KeyInt)key) >> _Shift;
+ do {
+ index &= capacitymask;
+ search = &table[index];
+ if (search->key == key) {
+ search->val = val;