#define BY_HASH(h) ((struct hashmap_entry**) ((uint8_t*) (h) + ALIGN(sizeof(Hashmap))))
-unsigned string_hash_func(const void *p) {
+unsigned string_hash_func(const void *p)
+{
unsigned hash = 5381;
const signed char *c;
/* DJB's hash function */
for (c = p; *c; c++)
- hash = (hash << 5) + hash + (unsigned) *c;
+ hash = (hash << 5) + hash + (unsigned)*c;
return hash;
}
-int string_compare_func(const void *a, const void *b) {
+int string_compare_func(const void *a, const void *b)
+{
return strcmp(a, b);
}
-unsigned trivial_hash_func(const void *p) {
+unsigned trivial_hash_func(const void *p)
+{
return PTR_TO_UINT(p);
}
-int trivial_compare_func(const void *a, const void *b) {
+int trivial_compare_func(const void *a, const void *b)
+{
return a < b ? -1 : (a > b ? 1 : 0);
}
-Hashmap *hashmap_new(hash_func_t hash_func, compare_func_t compare_func) {
+Hashmap *hashmap_new(hash_func_t hash_func, compare_func_t compare_func)
+{
Hashmap *h;
size_t size;
- size = ALIGN(sizeof(Hashmap)) + NBUCKETS * sizeof(struct hashmap_entry*);
+ size = ALIGN(sizeof(Hashmap)) + NBUCKETS * sizeof(struct hashmap_entry *);
h = malloc0(size);
return h;
}
-int hashmap_ensure_allocated(Hashmap **h, hash_func_t hash_func, compare_func_t compare_func) {
+int hashmap_ensure_allocated(Hashmap ** h, hash_func_t hash_func, compare_func_t compare_func)
+{
assert(h);
if (*h)
return 0;
}
-static void link_entry(Hashmap *h, struct hashmap_entry *e, unsigned hash) {
+static void link_entry(Hashmap * h, struct hashmap_entry *e, unsigned hash)
+{
assert(h);
assert(e);
assert(h->n_entries >= 1);
}
-static void unlink_entry(Hashmap *h, struct hashmap_entry *e, unsigned hash) {
+static void unlink_entry(Hashmap * h, struct hashmap_entry *e, unsigned hash)
+{
assert(h);
assert(e);
h->n_entries--;
}
-static void remove_entry(Hashmap *h, struct hashmap_entry **ep) {
+static void remove_entry(Hashmap * h, struct hashmap_entry **ep)
+{
struct hashmap_entry *e = *ep;
unsigned hash;
*ep = NULL;
}
-void hashmap_free(Hashmap*h) {
+void hashmap_free(Hashmap * h)
+{
if (!h)
return;
free(h);
}
-void hashmap_free_free(Hashmap *h) {
+void hashmap_free_free(Hashmap * h)
+{
void *p;
while ((p = hashmap_steal_first(h)))
hashmap_free(h);
}
-void hashmap_clear(Hashmap *h) {
+void hashmap_clear(Hashmap * h)
+{
if (!h)
return;
}
}
-static struct hashmap_entry *hash_scan(Hashmap *h, unsigned hash, const void *key) {
+static struct hashmap_entry *hash_scan(Hashmap * h, unsigned hash, const void *key)
+{
struct hashmap_entry *e;
assert(h);
assert(hash < NBUCKETS);
return NULL;
}
-int hashmap_put(Hashmap *h, const void *key, void *value) {
+int hashmap_put(Hashmap * h, const void *key, void *value)
+{
struct hashmap_entry *e;
unsigned hash;
return 1;
}
-int hashmap_replace(Hashmap *h, const void *key, void *value) {
+int hashmap_replace(Hashmap * h, const void *key, void *value)
+{
struct hashmap_entry *e;
unsigned hash;
return hashmap_put(h, key, value);
}
-void* hashmap_get(Hashmap *h, const void *key) {
+void *hashmap_get(Hashmap * h, const void *key)
+{
unsigned hash;
struct hashmap_entry *e;
return e->value;
}
-void* hashmap_remove(Hashmap *h, const void *key) {
+void *hashmap_remove(Hashmap * h, const void *key)
+{
struct hashmap_entry *e;
unsigned hash;
void *data;
return data;
}
-int hashmap_remove_and_put(Hashmap *h, const void *old_key, const void *new_key, void *value) {
+int hashmap_remove_and_put(Hashmap * h, const void *old_key, const void *new_key, void *value)
+{
struct hashmap_entry *e;
unsigned old_hash, new_hash;
return 0;
}
-int hashmap_remove_and_replace(Hashmap *h, const void *old_key, const void *new_key, void *value) {
+int hashmap_remove_and_replace(Hashmap * h, const void *old_key, const void *new_key, void *value)
+{
struct hashmap_entry *e, *k;
unsigned old_hash, new_hash;
return 0;
}
-void* hashmap_remove_value(Hashmap *h, const void *key, void *value) {
+void *hashmap_remove_value(Hashmap * h, const void *key, void *value)
+{
struct hashmap_entry *e;
unsigned hash;
return value;
}
-void *hashmap_iterate(Hashmap *h, Iterator *i, const void **key) {
+void *hashmap_iterate(Hashmap * h, Iterator * i, const void **key)
+{
struct hashmap_entry *e;
assert(i);
if (*i == ITERATOR_FIRST && !h->iterate_list_head)
goto at_end;
- e = *i == ITERATOR_FIRST ? h->iterate_list_head : (struct hashmap_entry*) *i;
+ e = *i == ITERATOR_FIRST ? h->iterate_list_head : (struct hashmap_entry *)*i;
if (e->iterate_next)
*i = (Iterator) e->iterate_next;
return e->value;
-at_end:
+ at_end:
*i = ITERATOR_LAST;
if (key)
return NULL;
}
-void *hashmap_iterate_backwards(Hashmap *h, Iterator *i, const void **key) {
+void *hashmap_iterate_backwards(Hashmap * h, Iterator * i, const void **key)
+{
struct hashmap_entry *e;
assert(i);
if (*i == ITERATOR_LAST && !h->iterate_list_tail)
goto at_beginning;
- e = *i == ITERATOR_LAST ? h->iterate_list_tail : (struct hashmap_entry*) *i;
+ e = *i == ITERATOR_LAST ? h->iterate_list_tail : (struct hashmap_entry *)*i;
if (e->iterate_previous)
*i = (Iterator) e->iterate_previous;
return e->value;
-at_beginning:
+ at_beginning:
*i = ITERATOR_FIRST;
if (key)
return NULL;
}
-void *hashmap_iterate_skip(Hashmap *h, const void *key, Iterator *i) {
+void *hashmap_iterate_skip(Hashmap * h, const void *key, Iterator * i)
+{
unsigned hash;
struct hashmap_entry *e;
return e->value;
}
-void* hashmap_first(Hashmap *h) {
+void *hashmap_first(Hashmap * h)
+{
if (!h)
return NULL;
return h->iterate_list_head->value;
}
-void* hashmap_first_key(Hashmap *h) {
+void *hashmap_first_key(Hashmap * h)
+{
if (!h)
return NULL;
if (!h->iterate_list_head)
return NULL;
- return (void*) h->iterate_list_head->key;
+ return (void *)h->iterate_list_head->key;
}
-void* hashmap_last(Hashmap *h) {
+void *hashmap_last(Hashmap * h)
+{
if (!h)
return NULL;
return h->iterate_list_tail->value;
}
-void* hashmap_steal_first(Hashmap *h) {
+void *hashmap_steal_first(Hashmap * h)
+{
struct hashmap_entry *e;
void *data;
return data;
}
-void* hashmap_steal_first_key(Hashmap *h) {
+void *hashmap_steal_first_key(Hashmap * h)
+{
struct hashmap_entry *e;
void *key;
return NULL;
e = h->iterate_list_head;
- key = (void*) e->key;
+ key = (void *)e->key;
remove_entry(h, &e);
return key;
}
-unsigned hashmap_size(Hashmap *h) {
+unsigned hashmap_size(Hashmap * h)
+{
if (!h)
return 0;
return h->n_entries;
}
-bool hashmap_isempty(Hashmap *h) {
+bool hashmap_isempty(Hashmap * h)
+{
if (!h)
return true;
return h->n_entries == 0;
}
-int hashmap_merge(Hashmap *h, Hashmap *other) {
+int hashmap_merge(Hashmap * h, Hashmap * other)
+{
struct hashmap_entry *e;
assert(h);
return 0;
}
-void hashmap_move(Hashmap *h, Hashmap *other) {
+void hashmap_move(Hashmap * h, Hashmap * other)
+{
struct hashmap_entry *e, *n;
assert(h);
}
}
-int hashmap_move_one(Hashmap *h, Hashmap *other, const void *key) {
+int hashmap_move_one(Hashmap * h, Hashmap * other, const void *key)
+{
unsigned h_hash, other_hash;
struct hashmap_entry *e;
return 0;
}
-char **hashmap_get_strv(Hashmap *h) {
+char **hashmap_get_strv(Hashmap * h)
+{
char **sv;
Iterator it;
char *item;
int n;
- sv = new(char*, h->n_entries+1);
+ sv = new(char *, h->n_entries + 1);
if (!sv)
return NULL;
n = 0;
HASHMAP_FOREACH(item, h, it)
- sv[n++] = item;
+ sv[n++] = item;
sv[n] = NULL;
return sv;