hashtable: add common hashtable hash/equals functions for pointer/string keys
authorMartin Willi <martin@revosec.ch>
Wed, 1 May 2013 10:13:28 +0000 (12:13 +0200)
committerMartin Willi <martin@revosec.ch>
Thu, 18 Jul 2013 10:17:53 +0000 (12:17 +0200)
src/libstrongswan/collections/hashtable.c
src/libstrongswan/collections/hashtable.h

index d181d8e..1003aa0 100644 (file)
@@ -16,6 +16,8 @@
 
 #include "hashtable.h"
 
+#include <utils/chunk.h>
+
 /** The maximum capacity of the hash table (MUST be a power of 2) */
 #define MAX_CAPACITY (1 << 30)
 
@@ -146,9 +148,40 @@ struct private_enumerator_t {
         * previous pair (used by remove_at)
         */
        pair_t *prev;
-
 };
 
+/*
+ * See header.
+ */
+u_int hashtable_hash_ptr(void *key)
+{
+       return chunk_hash(chunk_from_thing(key));
+}
+
+/*
+ * See header.
+ */
+u_int hashtable_hash_str(void *key)
+{
+       return chunk_hash(chunk_from_str((char*)key));
+}
+
+/*
+ * See header.
+ */
+bool hashtable_equals_ptr(void *key, void *other_key)
+{
+       return key == other_key;
+}
+
+/*
+ * See header.
+ */
+bool hashtable_equals_str(void *key, void *other_key)
+{
+       return streq(key, other_key);
+}
+
 /**
  * This function returns the next-highest power of two for the given number.
  * The algorithm works by setting all bits on the right-hand side of the most
@@ -441,4 +474,3 @@ hashtable_t *hashtable_create(hashtable_hash_t hash, hashtable_equals_t equals,
 
        return &this->public;
 }
-
index e38850d..520a86c 100644 (file)
@@ -34,6 +34,22 @@ typedef struct hashtable_t hashtable_t;
 typedef u_int (*hashtable_hash_t)(void *key);
 
 /**
+ * Hashtable hash function calculation the hash solely based on the key pointer.
+ *
+ * @param key                  key to hash
+ * @return                             hash of key
+ */
+u_int hashtable_hash_ptr(void *key);
+
+/**
+ * Hashtable hash function calculation the hash for char* keys.
+ *
+ * @param key                  key to hash, a char*
+ * @return                             hash of key
+ */
+u_int hashtable_hash_str(void *key);
+
+/**
  * Prototype for a function that compares the two keys for equality.
  *
  * @param key                  first key (the one we are looking for)
@@ -43,6 +59,24 @@ typedef u_int (*hashtable_hash_t)(void *key);
 typedef bool (*hashtable_equals_t)(void *key, void *other_key);
 
 /**
+ * Hashtable equals function comparing pointers.
+ *
+ * @param key                  key to compare
+ * @param other_key            other key to compare
+ * @return                             TRUE if key == other_key
+ */
+bool hashtable_equals_ptr(void *key, void *other_key);
+
+/**
+ * Hashtable equals function comparing char* keys.
+ *
+ * @param key                  key to compare
+ * @param other_key            other key to compare
+ * @return                             TRUE if streq(key, other_key)
+ */
+bool hashtable_equals_str(void *key, void *other_key);
+
+/**
  * Class implementing a hash table.
  *
  * General purpose hash table. This hash table is not synchronized.
@@ -121,7 +155,6 @@ struct hashtable_t {
         * Destroys a hash table object.
         */
        void (*destroy) (hashtable_t *this);
-
 };
 
 /**