1 #include "AutoPanoSift.h"
2 
3 /* This is a minimal subset of the C# Container Class Hashtable */
4 
5 /* At the moment, there is NO hashtable functionality...
6 ** just an implementation of a similar interface
7 ** As far as I can see, the Hashtables are small and little used
8 ** so no  performance issue expected from this braindead implementation
9 */
10 
HashTable_new0(void * delete_key,void * delete_value)11 HashTable* HashTable_new0(void* delete_key, void* delete_value)
12 {
13     HashTable* self = (HashTable*)malloc(sizeof(HashTable));
14     self->keys = ArrayList_new0(delete_key);
15     self->values = ArrayList_new0(delete_value);
16     return self;
17 }
18 
HashTable_delete(HashTable * self)19 void HashTable_delete(HashTable* self)
20 {
21     if (self) {
22 	ArrayList_delete(self->keys);
23 	ArrayList_delete(self->values);
24 	free(self);
25     }
26 }
27 
HashTable_GetItem(HashTable * self,void * key)28 void* HashTable_GetItem(HashTable* self, void* key)
29 {
30     int index = ArrayList_IndexOf(self->keys, key);
31     if (index < 0) {
32 	return NULL;
33     }
34     return ArrayList_GetItem(self->values, index);
35 }
36 
HashTable_SetItem(HashTable * self,void * key,void * value)37 void HashTable_SetItem(HashTable* self, void* key, void* value)
38 {
39     int index = ArrayList_IndexOf(self->keys, key);
40     if (index >= 0) {
41 	ArrayList_SetItem(self->values, index, value);
42     } else {
43 	HashTable_AddItem(self, key, value);
44     }
45 }
46 
HashTable_AddItem(HashTable * self,void * key,void * value)47 void HashTable_AddItem(HashTable* self, void* key, void* value)
48 {
49     ArrayList_AddItem(self->keys, key);
50     ArrayList_AddItem(self->values, value);
51 }
52 
HashTable_Contains(HashTable * self,void * key)53 bool HashTable_Contains(HashTable* self, void* key)
54 {
55     return ArrayList_Contains(self->keys, key);
56 }
57