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