hashtable: add common hashtable hash/equals functions for pointer/string keys

This commit is contained in:
Martin Willi
2013-07-18 12:17:53 +02:00
parent 01c0267778
commit 437a6feb07
2 changed files with 68 additions and 3 deletions
+34 -2
View File
@@ -16,6 +16,8 @@
#include "hashtable.h" #include "hashtable.h"
#include <utils/chunk.h>
/** The maximum capacity of the hash table (MUST be a power of 2) */ /** The maximum capacity of the hash table (MUST be a power of 2) */
#define MAX_CAPACITY (1 << 30) #define MAX_CAPACITY (1 << 30)
@@ -146,9 +148,40 @@ struct private_enumerator_t {
* previous pair (used by remove_at) * previous pair (used by remove_at)
*/ */
pair_t *prev; 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. * 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 * 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; return &this->public;
} }
+34 -1
View File
@@ -33,6 +33,22 @@ typedef struct hashtable_t hashtable_t;
*/ */
typedef u_int (*hashtable_hash_t)(void *key); 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. * Prototype for a function that compares the two keys for equality.
* *
@@ -42,6 +58,24 @@ typedef u_int (*hashtable_hash_t)(void *key);
*/ */
typedef bool (*hashtable_equals_t)(void *key, void *other_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. * Class implementing a hash table.
* *
@@ -121,7 +155,6 @@ struct hashtable_t {
* Destroys a hash table object. * Destroys a hash table object.
*/ */
void (*destroy) (hashtable_t *this); void (*destroy) (hashtable_t *this);
}; };
/** /**