2 * This file is part of libFirm.
3 * Copyright (C) 2012 University of Karlsruhe.
8 * @brief simplified hashmap for pointer -> pointer mappings
9 * @author Hubert Schmid
22 int dummy; /* dummy entry */
26 #define INITIAL_SLOTS 64
28 /** map a pmap into a set */
29 #define M2S(map) (set *)(map)
32 * compare the keys of two entry pairs
34 static int pmap_entry_cmp(const void *p1, const void *p2, size_t size)
36 const pmap_entry *entry1 = (const pmap_entry*) p1;
37 const pmap_entry *entry2 = (const pmap_entry*) p2;
40 return entry1->key != entry2->key;
43 /* Creates a new empty map with an initial number of slots. */
44 pmap *pmap_create_ex(size_t slots)
46 return (pmap *)new_set(pmap_entry_cmp, slots);
49 pmap *pmap_create(void)
51 return pmap_create_ex(INITIAL_SLOTS);
54 void pmap_destroy(pmap *map)
59 void pmap_insert(pmap *map, const void *key, void *value)
64 p = set_insert(pmap_entry, M2S(map), &entry, sizeof(pmap_entry), hash_ptr(key));
68 int pmap_contains(pmap *map, const void *key)
70 return pmap_find(map, key) != NULL;
73 pmap_entry * pmap_find(pmap *map, const void *key)
75 pmap_entry const entry = { key, 0 };
76 return set_find(pmap_entry, M2S(map), &entry, sizeof(entry), hash_ptr(key));
80 void * (pmap_get)(pmap *map, const void *key)
82 pmap_entry * entry = pmap_find(map, key);
83 return entry == NULL ? NULL : entry->value;
86 size_t pmap_count(pmap *map)
88 return set_count(M2S(map));
91 pmap_entry *pmap_first(pmap *map)
93 return set_first(pmap_entry, M2S(map));
96 pmap_entry *pmap_next(pmap *map)
98 return set_next(pmap_entry, M2S(map));
101 void pmap_break(pmap *map)