hashtable: enforce, document non-zero keys
authorBrian Norris <banorris@uci.edu>
Tue, 16 Apr 2013 16:49:01 +0000 (09:49 -0700)
committerBrian Norris <banorris@uci.edu>
Tue, 16 Apr 2013 18:38:01 +0000 (11:38 -0700)
HashTable does not support a key of "zero." ...

hashtable.h

index c09b3ff3e77f344f1dd3fa8ab0f4685be5801b87..71b05cea015d939d7b2b039c4cea8f81afec8170 100644 (file)
@@ -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
- * 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
@@ -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) {
+               /* HashTable cannot handle 0 as a key */
+               ASSERT(key);
+
                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;
 
+               /* HashTable cannot handle 0 as a key */
+               ASSERT(key);
+
                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;
 
+               /* HashTable cannot handle 0 as a key */
+               ASSERT(key);
+
                unsigned int index = ((_KeyInt)key) >> _Shift;
                do {
                        index &= capacitymask;