Compare commits
2 Commits
1ca8160e07
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 3d8ce4dbcd | |||
| 0d313cf474 |
@@ -46,7 +46,7 @@
|
||||
#define KTOB(htb,len) ((len) * (htb)->scale[HAWK_HTB_KEY])
|
||||
#define VTOB(htb,len) ((len) * (htb)->scale[HAWK_HTB_VAL])
|
||||
|
||||
HAWK_INLINE pair_t* hawk_htb_allocpair (hawk_htb_t* htb, void* kptr, hawk_oow_t klen, void* vptr, hawk_oow_t vlen)
|
||||
static HAWK_INLINE_ALWAYS pair_t* alloc_pair (hawk_htb_t* htb, void* kptr, hawk_oow_t klen, void* vptr, hawk_oow_t vlen)
|
||||
{
|
||||
pair_t* n;
|
||||
copier_t kcop, vcop;
|
||||
@@ -115,7 +115,7 @@ HAWK_INLINE pair_t* hawk_htb_allocpair (hawk_htb_t* htb, void* kptr, hawk_oow_t
|
||||
return n;
|
||||
}
|
||||
|
||||
HAWK_INLINE void hawk_htb_freepair (hawk_htb_t* htb, pair_t* pair)
|
||||
static HAWK_INLINE_ALWAYS void free_pair (hawk_htb_t* htb, pair_t* pair)
|
||||
{
|
||||
if (htb->style->freeer[HAWK_HTB_KEY] != HAWK_NULL)
|
||||
htb->style->freeer[HAWK_HTB_KEY](htb, KPTR(pair), KLEN(pair));
|
||||
@@ -124,7 +124,17 @@ HAWK_INLINE void hawk_htb_freepair (hawk_htb_t* htb, pair_t* pair)
|
||||
hawk_gem_freemem(htb->gem, pair);
|
||||
}
|
||||
|
||||
static HAWK_INLINE pair_t* change_pair_val (hawk_htb_t* htb, pair_t* pair, void* vptr, hawk_oow_t vlen)
|
||||
pair_t* hawk_htb_allocpair (hawk_htb_t* htb, void* kptr, hawk_oow_t klen, void* vptr, hawk_oow_t vlen)
|
||||
{
|
||||
return alloc_pair(htb, kptr, klen, vptr, vlen);
|
||||
}
|
||||
|
||||
void hawk_htb_freepair (hawk_htb_t* htb, pair_t* pair)
|
||||
{
|
||||
free_pair(htb, pair);
|
||||
}
|
||||
|
||||
static HAWK_INLINE_ALWAYS pair_t* change_pair_val (hawk_htb_t* htb, pair_t* pair, void* vptr, hawk_oow_t vlen)
|
||||
{
|
||||
if (VPTR(pair) == vptr && VLEN(pair) == vlen)
|
||||
{
|
||||
@@ -157,9 +167,9 @@ static HAWK_INLINE pair_t* change_pair_val (hawk_htb_t* htb, pair_t* pair, void*
|
||||
else
|
||||
{
|
||||
/* need to reconstruct the pair */
|
||||
pair_t* p = hawk_htb_allocpair(htb, KPTR(pair), KLEN(pair), vptr, vlen);
|
||||
pair_t* p = alloc_pair(htb, KPTR(pair), KLEN(pair), vptr, vlen);
|
||||
if (HAWK_UNLIKELY(!p)) return HAWK_NULL;
|
||||
hawk_htb_freepair(htb, pair);
|
||||
free_pair(htb, pair);
|
||||
return p;
|
||||
}
|
||||
}
|
||||
@@ -436,7 +446,7 @@ static HAWK_INLINE int reorganize (hawk_htb_t* htb)
|
||||
#define ENSERT 3
|
||||
#define INSERT 4
|
||||
|
||||
static HAWK_INLINE pair_t* insert (hawk_htb_t* htb, void* kptr, hawk_oow_t klen, void* vptr, hawk_oow_t vlen, int opt)
|
||||
static HAWK_INLINE_ALWAYS pair_t* insert (hawk_htb_t* htb, void* kptr, hawk_oow_t klen, void* vptr, hawk_oow_t vlen, int opt)
|
||||
{
|
||||
pair_t* pair, * p, * prev, * next;
|
||||
hawk_oow_t hc;
|
||||
@@ -507,7 +517,7 @@ static HAWK_INLINE pair_t* insert (hawk_htb_t* htb, void* kptr, hawk_oow_t klen,
|
||||
|
||||
HAWK_ASSERT(pair == HAWK_NULL);
|
||||
|
||||
pair = hawk_htb_allocpair(htb, kptr, klen, vptr, vlen);
|
||||
pair = alloc_pair(htb, kptr, klen, vptr, vlen);
|
||||
if (HAWK_UNLIKELY(!pair)) return HAWK_NULL; /* error */
|
||||
|
||||
NEXT(pair) = htb->bucket[hc];
|
||||
@@ -617,7 +627,7 @@ int hawk_htb_delete (hawk_htb_t* htb, const void* kptr, hawk_oow_t klen)
|
||||
htb->bucket[hc] = NEXT(pair);
|
||||
else NEXT(prev) = NEXT(pair);
|
||||
|
||||
hawk_htb_freepair(htb, pair);
|
||||
free_pair(htb, pair);
|
||||
htb->size--;
|
||||
htb->rev++;
|
||||
|
||||
@@ -645,7 +655,7 @@ void hawk_htb_clear (hawk_htb_t* htb)
|
||||
while (pair)
|
||||
{
|
||||
next = NEXT(pair);
|
||||
hawk_htb_freepair(htb, pair);
|
||||
free_pair(htb, pair);
|
||||
htb->size--;
|
||||
pair = next;
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
#define rotate_left(rbt,pivot) rotate(rbt,pivot,1);
|
||||
#define rotate_right(rbt,pivot) rotate(rbt,pivot,0);
|
||||
|
||||
HAWK_INLINE hawk_rbt_pair_t* hawk_rbt_allocpair (
|
||||
static HAWK_INLINE_ALWAYS hawk_rbt_pair_t* alloc_pair (
|
||||
hawk_rbt_t* rbt, void* kptr, hawk_oow_t klen, void* vptr, hawk_oow_t vlen)
|
||||
{
|
||||
hawk_rbt_pair_t* pair;
|
||||
@@ -120,7 +120,7 @@ HAWK_INLINE hawk_rbt_pair_t* hawk_rbt_allocpair (
|
||||
return pair;
|
||||
}
|
||||
|
||||
HAWK_INLINE void hawk_rbt_freepair (hawk_rbt_t* rbt, hawk_rbt_pair_t* pair)
|
||||
static HAWK_INLINE_ALWAYS void free_pair (hawk_rbt_t* rbt, hawk_rbt_pair_t* pair)
|
||||
{
|
||||
if (rbt->style->freeer[HAWK_RBT_KEY])
|
||||
rbt->style->freeer[HAWK_RBT_KEY](rbt, KPTR(pair), KLEN(pair));
|
||||
@@ -129,6 +129,16 @@ HAWK_INLINE void hawk_rbt_freepair (hawk_rbt_t* rbt, hawk_rbt_pair_t* pair)
|
||||
hawk_gem_freemem(rbt->gem, pair);
|
||||
}
|
||||
|
||||
hawk_rbt_pair_t* hawk_rbt_allocpair (hawk_rbt_t* rbt, void* kptr, hawk_oow_t klen, void* vptr, hawk_oow_t vlen)
|
||||
{
|
||||
return alloc_pair(rbt, kptr, klen, vptr, vlen);
|
||||
}
|
||||
|
||||
void hawk_rbt_freepair (hawk_rbt_t* rbt, hawk_rbt_pair_t* pair)
|
||||
{
|
||||
free_pair(rbt, pair);
|
||||
}
|
||||
|
||||
static hawk_rbt_style_t style[] =
|
||||
{
|
||||
{
|
||||
@@ -450,7 +460,7 @@ static hawk_rbt_pair_t* change_pair_val (hawk_rbt_t* rbt, hawk_rbt_pair_t* pair,
|
||||
else
|
||||
{
|
||||
/* need to reconstruct the pair */
|
||||
hawk_rbt_pair_t* p = hawk_rbt_allocpair(rbt, KPTR(pair), KLEN(pair), vptr, vlen);
|
||||
hawk_rbt_pair_t* p = alloc_pair(rbt, KPTR(pair), KLEN(pair), vptr, vlen);
|
||||
if (HAWK_UNLIKELY(!p)) return HAWK_NULL;
|
||||
|
||||
p->color = pair->color;
|
||||
@@ -475,7 +485,7 @@ static hawk_rbt_pair_t* change_pair_val (hawk_rbt_t* rbt, hawk_rbt_pair_t* pair,
|
||||
|
||||
if (pair == rbt->root) rbt->root = p;
|
||||
|
||||
hawk_rbt_freepair(rbt, pair);
|
||||
free_pair(rbt, pair);
|
||||
return p;
|
||||
}
|
||||
}
|
||||
@@ -539,7 +549,7 @@ static hawk_rbt_pair_t* insert (hawk_rbt_t* rbt, void* kptr, hawk_oow_t klen, vo
|
||||
return HAWK_NULL;
|
||||
}
|
||||
|
||||
x_new = hawk_rbt_allocpair(rbt, kptr, klen, vptr, vlen);
|
||||
x_new = alloc_pair(rbt, kptr, klen, vptr, vlen);
|
||||
if (HAWK_UNLIKELY(!x_new)) return HAWK_NULL;
|
||||
|
||||
if (x_par == HAWK_NULL)
|
||||
@@ -819,7 +829,7 @@ static void delete_pair (hawk_rbt_t* rbt, hawk_rbt_pair_t* pair)
|
||||
if (y->color == HAWK_RBT_BLACK && !IS_NIL(rbt,x))
|
||||
adjust_for_delete(rbt, x, parent);
|
||||
|
||||
hawk_rbt_freepair(rbt, y);
|
||||
free_pair(rbt, y);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -844,7 +854,7 @@ static void delete_pair (hawk_rbt_t* rbt, hawk_rbt_pair_t* pair)
|
||||
if (pair->left->parent == pair) pair->left->parent = y;
|
||||
if (pair->right->parent == pair) pair->right->parent = y;
|
||||
|
||||
hawk_rbt_freepair(rbt, pair);
|
||||
free_pair(rbt, pair);
|
||||
}
|
||||
|
||||
rbt->size--;
|
||||
|
||||
@@ -139,6 +139,18 @@ function main()
|
||||
tap_ensure(!!@[1], @true, @SCRIPTNAME, @SCRIPTLINE);
|
||||
tap_ensure(!dummy, @false, @SCRIPTNAME, @SCRIPTLINE);
|
||||
tap_ensure(!!dummy, @true, @SCRIPTNAME, @SCRIPTLINE);
|
||||
tmp = 0;
|
||||
tap_ensure(!tmp && 0, 0, @SCRIPTNAME, @SCRIPTLINE);
|
||||
tap_ensure(!tmp && 1, 1, @SCRIPTNAME, @SCRIPTLINE);
|
||||
tap_ensure(!tmp || 0, 1, @SCRIPTNAME, @SCRIPTLINE);
|
||||
tap_ensure(!tmp || 1, 1, @SCRIPTNAME, @SCRIPTLINE);
|
||||
tap_ensure(1 && !tmp, 1, @SCRIPTNAME, @SCRIPTLINE);
|
||||
tap_ensure(0 || !tmp, 1, @SCRIPTNAME, @SCRIPTLINE);
|
||||
tmp = 1;
|
||||
tap_ensure(!tmp && 0, 0, @SCRIPTNAME, @SCRIPTLINE);
|
||||
tap_ensure(!tmp && 1, 0, @SCRIPTNAME, @SCRIPTLINE);
|
||||
tap_ensure(!tmp || 0, 0, @SCRIPTNAME, @SCRIPTLINE);
|
||||
tap_ensure(!tmp || 1, 1, @SCRIPTNAME, @SCRIPTLINE);
|
||||
|
||||
tap_ensure(sprintf("%d", @true), "1", @SCRIPTNAME, @SCRIPTLINE);
|
||||
tap_ensure(sprintf("%d", @false), "0", @SCRIPTNAME, @SCRIPTLINE);
|
||||
|
||||
Reference in New Issue
Block a user