Removed, fourcc.h is now used to create magic numbers
[libfirm] / ir / adt / pmap.c
1 /*
2  * Project:     libFIRM
3  * File name:   ir/adt/eset.c
4  * Purpose:     Datentyp: Vereinfachte Map (hash-map) zum Speichern von
5  *              Zeigern/Adressen -> Zeigern/Adressen.
6  * Author:      Hubert Schmid
7  * Modified by:
8  * Created:     09.06.2002
9  * CVS-ID:      $Id$
10  * Copyright:   (c) 2002 Universität Karlsruhe
11  * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
12  */
13
14 #include "pmap.h"
15
16 #include <assert.h>
17 #include "set.h"
18 #include "hashptr.h"
19
20
21 struct pmap {
22   int dummy; /* dummy entry */
23 };
24
25
26 #define INITIAL_SLOTS 64
27
28
29 static int pmap_entry_cmp(const void *p1, const void *p2, size_t size) {
30   const pmap_entry *entry1 = p1;
31   const pmap_entry *entry2 = p2;
32
33   return entry1->key != entry2->key;
34 }
35
36
37 pmap *pmap_create(void) {
38   return (pmap *)new_set(pmap_entry_cmp, INITIAL_SLOTS);
39 }
40
41
42 void pmap_destroy(pmap *map) {
43   del_set((set *)map);
44 }
45
46
47 void pmap_insert(pmap *map, void *key, void *value) {
48   if (pmap_contains(map, key)) {
49     pmap_entry * entry = pmap_find(map, key);
50     entry->value = value;
51   } else {
52     pmap_entry entry;
53     entry.key = key;
54     entry.value = value;
55     set_insert((set *)map, &entry, sizeof(pmap_entry), HASH_PTR(key));
56   }
57 }
58
59
60 int pmap_contains(pmap *map, void *key) {
61   return set_find((set *)map, &key, sizeof(pmap_entry), HASH_PTR(key)) != NULL;
62 }
63
64
65 pmap_entry * pmap_find(pmap *map, void *key) {
66   return (pmap_entry *)set_find((set *)map, &key, sizeof(pmap_entry), HASH_PTR(key));
67 }
68
69
70 void * pmap_get(pmap *map, void *key) {
71   pmap_entry * entry = pmap_find(map, key);
72   return entry == NULL ? NULL : entry->value;
73 }
74
75
76 pmap_entry *pmap_first(pmap *map) {
77   return (pmap_entry *) set_first((set *)map);
78 }
79
80
81 pmap_entry *pmap_next(pmap *map) {
82   return (pmap_entry *) set_next((set *)map);
83 }