00001
00051 #ifndef _HASHMAP_
00052 #define _HASHMAP_
00053
00054 #include "iterator.h"
00055
00059 typedef struct sHashNode
00060 {
00062 void* key;
00064 void* value;
00066 struct sHashNode* next;
00067 }SHashNode;
00068
00072 typedef SHashNode* HashNode;
00073
00077 typedef struct sHashMap
00078 {
00080 int(*hash)(void*);
00082 int(*equals)(void*,void*);
00084 int size;
00086 int length;
00088 float factor;
00090 HashNode* elems;
00091 }SHashMap;
00092
00096 typedef SHashMap* HashMap;
00097
00098
00099
00122 HashMap newHash(int size,float factor
00123 ,int(*hash)(void*)
00124 ,int(*equals)(void*,void*)
00125 );
00126
00137 int hashSetHash(HashMap hmap,int(*hash)(void*));
00138
00149 int hashSetEquals(HashMap hmap,int(*equals)(void*,void*));
00150
00161 int hashSetFactor(HashMap hmap,int factor);
00162
00171 void hashDelete(HashMap hmap);
00172
00189 int hashInsert(HashMap hmap,void* key,void* value,int replace);
00190
00210 int hashRemove(HashMap hmap,void* key,void** value,void(*del)(void*));
00211
00229 int hashGet(HashMap hmap,void* key,void** value);
00230
00239 int hashSize(HashMap hmap);
00240
00252 Iterator hashKeys(HashMap hmap);
00253
00266 Iterator hashValues(HashMap hmap);
00267
00268 #endif