#include <stdlib.h>
#include <stdio.h>
+#include "mymemory.h"
/**
* Hashtable linked node class, for chained storage of hash table conflicts. By
* @tparam _free Provide your own 'free' for the table, or default to
* snapshotting.
*/
-template<typename _Key, typename _Val, typename _KeyInt, int _Shift=0, void * (* _malloc)(size_t)=malloc, void * (* _calloc)(size_t, size_t)=calloc, void (*_free)(void *)=free>
+template<typename _Key, typename _Val, typename _KeyInt, int _Shift=0, void * (* _malloc)(size_t)=snapshot_malloc, void * (* _calloc)(size_t, size_t)=snapshot_calloc, void (*_free)(void *)=snapshot_free>
class HashTable {
public:
/**
size++;
}
- /**
- * @brief Get a valid pointer to a value corresponding to a given key
- *
- * Ensure that key is present in the hash table, then return a pointer
- * to its value bin. This may require either creating a new bin for
- * this key (with a default-constructed value) or simply locating and
- * returning a pointer to an existing value.
- * @param key The key to check
- * @return A pointer to the value in the table
- */
- _Val * get_safe_ptr(_Key key) {
- if (size > threshold)
- resize(capacity << 1);
-
- struct hashlistnode<_Key,_Val, _malloc, _calloc, _free> *ptr = table[(((_KeyInt)key) & mask)>>_Shift];
- struct hashlistnode<_Key,_Val, _malloc, _calloc, _free> *search = ptr;
-
- while(search!=NULL) {
- if (search->key==key) {
- return &search->val;
- }
- search=search->next;
- }
-
- struct hashlistnode<_Key,_Val, _malloc, _calloc, _free> *newptr=(struct hashlistnode<_Key,_Val, _malloc, _calloc, _free> *)new struct hashlistnode<_Key,_Val, _malloc, _calloc, _free>;
- newptr->key=key;
- newptr->next=ptr;
- table[(((_KeyInt)key)&mask)>>_Shift]=newptr;
- size++;
- return &newptr->val;
- }
-
/** Lookup the corresponding value for the given key. */
_Val get(_Key key) {
struct hashlistnode<_Key,_Val, _malloc, _calloc, _free> *search = table[(((_KeyInt)key) & mask)>>_Shift];
return (_Val)0;
}
- /** Lookup the corresponding value for the given key. */
- _Val * getptr(_Key key) {
- struct hashlistnode<_Key,_Val, _malloc, _calloc, _free> *search = table[(((_KeyInt)key) & mask)>>_Shift];
-
- while(search!=NULL) {
- if (search->key==key) {
- return & search->val;
- }
- search=search->next;
- }
- return (_Val *) NULL;
- }
-
/** Check whether the table contains a value for the given key. */
bool contains(_Key key) {
struct hashlistnode<_Key,_Val, _malloc, _calloc, _free> *search = table[(((_KeyInt)key) & mask)>>_Shift];