From 896f385f6690cfbe51ea1c07d7361a01914e9f9f Mon Sep 17 00:00:00 2001
From: Brian Norris <banorris@uci.edu>
Date: Tue, 16 Apr 2013 09:49:01 -0700
Subject: [PATCH] hashtable: enforce, document non-zero keys

HashTable does not support a key of "zero." ...
---
 hashtable.h | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/hashtable.h b/hashtable.h
index c09b3ff..71b05ce 100644
--- 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
- * 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;
-- 
2.34.1