projects
/
model-checker.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
hashtable: enforce, document non-zero keys
[model-checker.git]
/
hashtable.h
diff --git
a/hashtable.h
b/hashtable.h
index c09b3ff3e77f344f1dd3fa8ab0f4685be5801b87..71b05cea015d939d7b2b039c4cea8f81afec8170 100644
(file)
--- a/
hashtable.h
+++ b/
hashtable.h
@@
-37,7
+37,8
@@
struct hashlistnode {
* @brief A simple, custom hash table
*
* By default it is snapshotting, but you can pass in your own allocation
* @brief A simple, custom hash table
*
* By default it is snapshotting, but you can pass in your own allocation
- * functions.
+ * functions. Note that this table does not support 0 (NULL) keys and is
+ * designed primarily with pointer-based keys in mind.
*
* @tparam _Key Type name for the key
* @tparam _Val Type name for the values to be stored
*
* @tparam _Key Type name for the key
* @tparam _Val Type name for the values to be stored
@@
-105,6
+106,9
@@
template<typename _Key, typename _Val, typename _KeyInt, int _Shift = 0, void *
/** Put a key value pair into the table. */
void put(_Key key, _Val val) {
/** Put a key value pair into the table. */
void put(_Key key, _Val val) {
+ /* HashTable cannot handle 0 as a key */
+ ASSERT(key);
+
if (size > threshold)
resize(capacity << 1);
if (size > threshold)
resize(capacity << 1);
@@
-130,6
+134,9
@@
template<typename _Key, typename _Val, typename _KeyInt, int _Shift = 0, void *
_Val get(_Key key) const {
struct hashlistnode<_Key, _Val> *search;
_Val get(_Key key) const {
struct hashlistnode<_Key, _Val> *search;
+ /* HashTable cannot handle 0 as a key */
+ ASSERT(key);
+
unsigned int index = ((_KeyInt)key) >> _Shift;
do {
index &= capacitymask;
unsigned int index = ((_KeyInt)key) >> _Shift;
do {
index &= capacitymask;
@@
-145,6
+152,9
@@
template<typename _Key, typename _Val, typename _KeyInt, int _Shift = 0, void *
bool contains(_Key key) const {
struct hashlistnode<_Key, _Val> *search;
bool contains(_Key key) const {
struct hashlistnode<_Key, _Val> *search;
+ /* HashTable cannot handle 0 as a key */
+ ASSERT(key);
+
unsigned int index = ((_KeyInt)key) >> _Shift;
do {
index &= capacitymask;
unsigned int index = ((_KeyInt)key) >> _Shift;
do {
index &= capacitymask;