aboutsummaryrefslogtreecommitdiff
path: root/include/base/macro/map.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/base/macro/map.h')
-rw-r--r--include/base/macro/map.h78
1 files changed, 39 insertions, 39 deletions
diff --git a/include/base/macro/map.h b/include/base/macro/map.h
index 1f07eab..cbcb47d 100644
--- a/include/base/macro/map.h
+++ b/include/base/macro/map.h
@@ -22,8 +22,8 @@ static const double HASHFILL = 0.77;
(flag[i >> 4] &= ~(3ul << ((i & 0xfU) << 1)))
#define map·setdelete(flag, i) (flag[i >> 4] |= 1ul << ((i & 0xfU) << 1))
-#define map·flagsize(m) ((m) < 16 ? 1 : (m) >> 4)
-#define map·fill(m, x) (!map·iseither((m)->flag, (x)))
+#define map·flagsize(m) ((m) < 16 ? 1 : (m) >> 4)
+#define map·filled(m, x) (!map·iseither((m)->flag, (x)))
/* map types */
#define MAP_STRUCT_BODY(key_t, val_t) \
@@ -48,7 +48,7 @@ static const double HASHFILL = 0.77;
(map)->len = (map)->occ = 0; \
}
-#define MAP_GET(i, map, key, hashfunc, equalfunc) \
+#define MAP_GET(map, i, keyv, hashfunc, equalfunc) \
int32 k, last, mask, step; \
if((map)->cap){ \
k = 0; \
@@ -57,11 +57,11 @@ static const double HASHFILL = 0.77;
mask = 0; \
step = 0; \
mask = (map)->cap - 1; \
- k = hashfunc((key)); \
+ k = hashfunc((keyv)); \
i = k & mask; \
last = i; \
while(!map·isempty((map)->flag, i) && \
- (map·isdelete((map)->flag, i) || !equalfunc((map)->key[i], (key)))){ \
+ (map·isdelete((map)->flag, i) || !equalfunc((map)->key[i], (keyv)))){\
i = (i + (++step)) & mask; \
if(i == last){ \
i = (map)->cap; \
@@ -85,7 +85,7 @@ static const double HASHFILL = 0.77;
else{ \
new_flags = (mem).alloc((heap), map·flagsize(newcap), sizeof(int32)); \
if(!new_flags) return -1; \
- mem·set(new_flags, map·flagsize(newcap) * sizeof(int32), 0xAA); \
+ mem·set(new_flags, map·flagsize(newcap)*sizeof(int32), 0xAA); \
if((map)->cap < newcap){ /* expand */ \
key_t *new_keys = (mem).alloc((heap), newcap, sizeof(key_t)); \
if(!new_keys){ \
@@ -154,39 +154,39 @@ static const double HASHFILL = 0.77;
(map)->val = new_vals; \
} \
(mem).free((heap), (map)->flag); /* free the working space */ \
- (map)->flag = new_flags; \
+ (map)->flag = new_flags; \
(map)->cap = newcap; \
- (map)->occ = (map)->len; \
+ (map)->occ = (map)->len; \
(map)->fill = (int32)((map)->cap * HASHFILL + 0.5); \
} \
return 0;
-#define MAP_PUT(map, key, hashfunc, equalfunc, resizefunc, err) \
+#define MAP_PUT(map, newkey, hashfunc, equalfunc, resizefunc, err) \
int32 x = 0; \
- if(map->occ >= map->fill){ \
- if(map->cap > (map->len << 1)){ \
- if(resizefunc(map, map->cap - 1) < 0){ \
+ if((map)->occ >= (map)->fill){ \
+ if((map)->cap > (map)->len << 1){ \
+ if(resizefunc((map), (map)->cap - 1) < 0){ \
*err = -1; \
- return map->cap; \
+ return (map)->cap; \
} \
- }else if(resizefunc(map, map->cap + 1) < 0){ \
+ }else if(resizefunc((map), (map)->cap + 1) < 0){ \
*err = -1; \
- return map->cap; \
+ return (map)->cap; \
} \
} \
\
{ \
- int32 k, i, site, last, mask = map->cap - 1, step = 0; \
- x = site = map->cap; \
- k = hashfunc((key)); \
+ int32 k, i, site, last, mask = (map)->cap - 1, step = 0; \
+ x = site = (map)->cap; \
+ k = hashfunc((newkey)); \
i = k & mask; \
- if(map·isempty(map->flag, i)) \
+ if(map·isempty((map)->flag, i)) \
x = i; /* for speed up */ \
else{ \
last = i; \
- while(!map·isempty(map->flag, i) && \
- (map·isdelete(map->flag, i) || !equalfunc(map->key[i], (key)))){ \
- if(map·isdelete(map->flag, i)) \
+ while(!map·isempty((map)->flag, i) && \
+ (map·isdelete((map)->flag, i) || !equalfunc((map)->key[i], (newkey)))){ \
+ if(map·isdelete((map)->flag, i)) \
site = i; \
i = (i + (++step)) & mask; \
if(i == last){ \
@@ -194,32 +194,32 @@ static const double HASHFILL = 0.77;
break; \
} \
} \
- if(x == map->cap){ \
- if(map·isempty(map->flag, i) && site != map->cap) \
+ if(x == (map)->cap){ \
+ if(map·isempty((map)->flag, i) && site != (map)->cap) \
x = site; \
else \
x = i; \
} \
} \
} \
- if(map·isempty(map->flag, x)){ /* not present at all */ \
- map->key[x] = (key); \
- map·setnotboth(map->flag, x); \
- ++map->len; \
- ++map->occ; \
+ if(map·isempty((map)->flag, x)){ /* not present at all */ \
+ (map)->key[x] = (newkey); \
+ map·setnotboth((map)->flag, x); \
+ ++(map)->len; \
+ ++(map)->occ; \
*err = 1; \
- }else if(map·isdelete(map->flag, x)){ /* deleted */ \
- map->key[x] = (key); \
- map·setnotboth(map->flag, x); \
- ++map->len; \
+ }else if(map·isdelete((map)->flag, x)){ /* deleted */ \
+ (map)->key[x] = (newkey); \
+ map·setnotboth((map)->flag, x); \
+ ++(map)->len; \
}else \
*err = 0; \
return x;
#define MAP_DEL(map, x) \
- if(x != map->cap && !map·iseither(map->flag, x)){ \
- map·setdelete(map->flag, x); \
- --map->len; \
+ if(x != (map)->cap && !map·iseither((map)->flag, x)){ \
+ map·setdelete((map)->flag, x); \
+ --(map)->len; \
}
/* set macro */
@@ -244,7 +244,7 @@ static const double HASHFILL = 0.77;
(set)->len = (set)->occ = 0; \
}
-#define SET_GET(i, set, key, hashfunc, equalfunc ) \
+#define SET_GET(set, i, keyv, hashfunc, equalfunc ) \
int32 k, last, mask, step; \
if((set)->cap){ \
k = 0; \
@@ -253,11 +253,11 @@ static const double HASHFILL = 0.77;
mask = 0; \
step = 0; \
mask = (set)->cap - 1; \
- k = hashfunc((key)); \
+ k = hashfunc((keyv)); \
i = k & mask; \
last = i; \
while(!map·isempty((set)->flag, i) && \
- (map·isdelete((set)->flag, i) || !equalfunc((set)->key[i], (key)))){ \
+ (map·isdelete((set)->flag, i) || !equalfunc((set)->key[i], (keyv)))){\
i = (i + (++step)) & mask; \
if(i == last){ \
i = (set)->cap; \