ast2firm: Implement casting from complex to real types.
[cparser] / entitymap.c
1 /*
2  * This file is part of cparser.
3  * Copyright (C) 2012 Matthias Braun <matze@braunis.de>
4  */
5 #include <config.h>
6
7 #include "entitymap_t.h"
8
9 static entitymap_entry_t null_entitymap_entry = { NULL, NULL };
10
11 static unsigned hash_ptr(const void *ptr)
12 {
13         unsigned ptr_int = ((char*) ptr - (char*) NULL);
14         return ptr_int >> 3;
15 }
16
17 #define DO_REHASH
18 #define HashSet                   entitymap_t
19 #define ValueType                 entitymap_entry_t
20 #define NullValue                 null_entitymap_entry
21 #define KeyType                   symbol_t*
22 #define ConstKeyType              const symbol_t*
23 #define GetKey(value)             (value).symbol
24 #define InitData(self,value,key)  (value).symbol = (key)
25 #define Hash(self,key)            hash_ptr(key)
26 #define KeysEqual(self,key1,key2) (key1) == (key2)
27 #define SetRangeEmpty(ptr,size)   memset(ptr, 0, (size) * sizeof((ptr)[0]))
28 #define EntrySetEmpty(value)      (value).symbol = NULL
29 #define EntrySetDeleted(value)    (value).symbol = (symbol_t*) -1
30 #define EntryIsEmpty(value)       ((value).symbol == NULL)
31 #define EntryIsDeleted(value)     ((value).symbol == (symbol_t*)-1)
32
33 #define hashset_init            entitymap_init
34 #define hashset_destroy         entitymap_destroy
35 entitymap_entry_t *_entitymap_insert(entitymap_t *map, symbol_t *symbol);
36 #define hashset_insert          _entitymap_insert
37 entitymap_entry_t *_entitymap_find(const entitymap_t *map, const symbol_t *symbol);
38 #define hashset_find            _entitymap_find
39
40 #include "adt/hashset.c.inl"
41
42 ir_entity *entitymap_get(const entitymap_t *map, symbol_t *symbol)
43 {
44         entitymap_entry_t *entry = _entitymap_find(map, symbol);
45         return entry->entity;
46 }
47
48 void entitymap_insert(entitymap_t *map, symbol_t *symbol, ir_entity *entity)
49 {
50         entitymap_entry_t *entry = _entitymap_insert(map, symbol);
51         entry->entity = entity;
52 }