2 * This file is part of cparser.
3 * Copyright (C) 2012 Matthias Braun <matze@braunis.de>
7 #include "entitymap_t.h"
9 static entitymap_entry_t null_entitymap_entry = { NULL, NULL };
11 static unsigned hash_ptr(const void *ptr)
13 unsigned ptr_int = ((char*) ptr - (char*) NULL);
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)
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
40 #include "adt/hashset.c.inl"
42 ir_entity *entitymap_get(const entitymap_t *map, symbol_t *symbol)
44 entitymap_entry_t *entry = _entitymap_find(map, symbol);
48 void entitymap_insert(entitymap_t *map, symbol_t *symbol, ir_entity *entity)
50 entitymap_entry_t *entry = _entitymap_insert(map, symbol);
51 entry->entity = entity;