nexmon – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 #include <isl_hmap_map_basic_set.h>
2  
3 struct isl_map_basic_set_pair {
4 isl_map *key;
5 isl_basic_set *val;
6 };
7  
8 __isl_give isl_hmap_map_basic_set *isl_hmap_map_basic_set_alloc(isl_ctx *ctx,
9 int min_size)
10 {
11 return (isl_hmap_map_basic_set *) isl_hash_table_alloc(ctx, min_size);
12 }
13  
14 static int free_pair(void **entry, void *user)
15 {
16 struct isl_map_basic_set_pair *pair = *entry;
17 isl_map_free(pair->key);
18 isl_basic_set_free(pair->val);
19 free(pair);
20 *entry = NULL;
21 return 0;
22 }
23  
24 void isl_hmap_map_basic_set_free(isl_ctx *ctx,
25 __isl_take isl_hmap_map_basic_set *hmap)
26 {
27 if (!hmap)
28 return;
29 isl_hash_table_foreach(ctx, &hmap->table, &free_pair, NULL);
30 isl_hash_table_free(ctx, &hmap->table);
31 }
32  
33 static int has_key(const void *entry, const void *key)
34 {
35 const struct isl_map_basic_set_pair *pair = entry;
36 isl_map *map = (isl_map *)key;
37  
38 return isl_map_plain_is_equal(pair->key, map);
39 }
40  
41 int isl_hmap_map_basic_set_has(isl_ctx *ctx,
42 __isl_keep isl_hmap_map_basic_set *hmap, __isl_keep isl_map *key)
43 {
44 uint32_t hash;
45  
46 hash = isl_map_get_hash(key);
47 return !!isl_hash_table_find(ctx, &hmap->table, hash, &has_key, key, 0);
48 }
49  
50 __isl_give isl_basic_set *isl_hmap_map_basic_set_get(isl_ctx *ctx,
51 __isl_keep isl_hmap_map_basic_set *hmap, __isl_take isl_map *key)
52 {
53 struct isl_hash_table_entry *entry;
54 struct isl_map_basic_set_pair *pair;
55 uint32_t hash;
56  
57 hash = isl_map_get_hash(key);
58 entry = isl_hash_table_find(ctx, &hmap->table, hash, &has_key, key, 0);
59 isl_map_free(key);
60  
61 if (!entry)
62 return NULL;
63  
64 pair = entry->data;
65  
66 return isl_basic_set_copy(pair->val);
67 }
68  
69 int isl_hmap_map_basic_set_set(isl_ctx *ctx,
70 __isl_keep isl_hmap_map_basic_set *hmap, __isl_take isl_map *key,
71 __isl_take isl_basic_set *val)
72 {
73 struct isl_hash_table_entry *entry;
74 struct isl_map_basic_set_pair *pair;
75 uint32_t hash;
76  
77 hash = isl_map_get_hash(key);
78 entry = isl_hash_table_find(ctx, &hmap->table, hash, &has_key, key, 1);
79  
80 if (!entry)
81 return -1;
82  
83 if (entry->data) {
84 pair = entry->data;
85 isl_basic_set_free(pair->val);
86 pair->val = val;
87 isl_map_free(key);
88 return 0;
89 }
90  
91 pair = isl_alloc_type(ctx, struct isl_map_basic_set_pair);
92 if (!pair) {
93 isl_map_free(key);
94 isl_basic_set_free(val);
95 return -1;
96 }
97  
98 entry->data = pair;
99 pair->key = key;
100 pair->val = val;
101 return 0;
102 }