7 _eet_str_direct_alloc(const char *str)
13 _eet_str_direct_free(const char *str)
17 /* Internal list stuff. */
24 eet_list_prepend(Eet_List *list, const void *data)
28 new = malloc(sizeof (Eet_List));
29 if (!new) return list;
37 eet_list_next(Eet_List *list)
39 if (!list) return NULL;
44 eet_list_data(Eet_List *list)
46 if (!list) return NULL;
48 return (void*) list->data;
51 eet_list_free(Eet_List *list)
55 Eet_List *current = list;
62 /* Internal hash stuff */
65 Eet_List *bucket[256];
67 typedef struct _Eet_Hash_Item Eet_Hash_Item;
74 _eet_hash_gen(const char *key)
76 unsigned int hash_num = 5381;
77 const unsigned char *ptr;
80 for (ptr = (unsigned char *)key; *ptr; ptr++)
81 hash_num = (hash_num * 33) ^ *ptr;
87 eet_hash_foreach(const Eet_Hash *hash, int (*func) (const Eet_Hash *hash, const char *key, void *data, void *fdata), const void *fdata)
93 for (i = 0; i < 256; ++i)
97 for (over = hash->bucket[i]; over; over = eet_list_next(over))
99 Eet_Hash_Item *item = eet_list_data(over);
101 if (!func(hash, item->key, (void*) item->data, (void*) fdata)) return ;
106 eet_hash_add(Eet_Hash *hash, const char *key, const void *data)
112 if (!hash) hash = calloc(1, sizeof (Eet_Hash));
113 if (!hash) return NULL;
115 item = malloc(sizeof (Eet_Hash_Item) + strlen(key) + 1);
116 if (!item) return hash;
119 item->key = (char*)(item + 1);
120 strcpy(item->key, key);
122 hash->bucket[_eet_hash_gen(key)] = eet_list_prepend(hash->bucket[_eet_hash_gen(key)], item);
127 eet_hash_free(Eet_Hash *hash)
133 for (i = 0; i < 256; ++i)
137 for (over = hash->bucket[i]; over; over = eet_list_next(over))
138 free(eet_list_data(over));
139 eet_list_free(hash->bucket[i]);
146 eet_test_setup_eddc(Eet_Data_Descriptor_Class *eddc)
148 eddc->version = EET_DATA_DESCRIPTOR_CLASS_VERSION;
149 eddc->func.mem_alloc = NULL;
150 eddc->func.mem_free = NULL;
151 eddc->func.str_alloc = NULL;
152 eddc->func.str_free = NULL;
153 eddc->func.list_next = eet_list_next;
154 eddc->func.list_append = eet_list_prepend;
155 eddc->func.list_data = eet_list_data;
156 eddc->func.list_free = eet_list_free;
157 eddc->func.hash_foreach = eet_hash_foreach;
158 eddc->func.hash_add = eet_hash_add;
159 eddc->func.hash_free = eet_hash_free;
160 eddc->func.str_direct_alloc = _eet_str_direct_alloc;
161 eddc->func.str_direct_free = _eet_str_direct_free;