Compare commits

..

2 Commits

Author SHA1 Message Date
hyung-hwan 3d8ce4dbcd removed redundant return in a void function
continuous-integration/drone/push Build is passing
2026-05-26 12:25:49 +09:00
hyung-hwan 0d313cf474 added some test cases to cover unary with relational ops
continuous-integration/drone/push Build is passing
refactored htb and rbt a bit
2026-05-25 11:56:22 +09:00
4 changed files with 50 additions and 18 deletions
+19 -9
View File
@@ -46,7 +46,7 @@
#define KTOB(htb,len) ((len) * (htb)->scale[HAWK_HTB_KEY]) #define KTOB(htb,len) ((len) * (htb)->scale[HAWK_HTB_KEY])
#define VTOB(htb,len) ((len) * (htb)->scale[HAWK_HTB_VAL]) #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; pair_t* n;
copier_t kcop, vcop; 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; 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) if (htb->style->freeer[HAWK_HTB_KEY] != HAWK_NULL)
htb->style->freeer[HAWK_HTB_KEY](htb, KPTR(pair), KLEN(pair)); 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); 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) 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 else
{ {
/* need to reconstruct the pair */ /* 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; if (HAWK_UNLIKELY(!p)) return HAWK_NULL;
hawk_htb_freepair(htb, pair); free_pair(htb, pair);
return p; return p;
} }
} }
@@ -436,7 +446,7 @@ static HAWK_INLINE int reorganize (hawk_htb_t* htb)
#define ENSERT 3 #define ENSERT 3
#define INSERT 4 #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; pair_t* pair, * p, * prev, * next;
hawk_oow_t hc; 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); 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 */ if (HAWK_UNLIKELY(!pair)) return HAWK_NULL; /* error */
NEXT(pair) = htb->bucket[hc]; 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); htb->bucket[hc] = NEXT(pair);
else NEXT(prev) = NEXT(pair); else NEXT(prev) = NEXT(pair);
hawk_htb_freepair(htb, pair); free_pair(htb, pair);
htb->size--; htb->size--;
htb->rev++; htb->rev++;
@@ -645,7 +655,7 @@ void hawk_htb_clear (hawk_htb_t* htb)
while (pair) while (pair)
{ {
next = NEXT(pair); next = NEXT(pair);
hawk_htb_freepair(htb, pair); free_pair(htb, pair);
htb->size--; htb->size--;
pair = next; pair = next;
} }
+17 -7
View File
@@ -53,7 +53,7 @@
#define rotate_left(rbt,pivot) rotate(rbt,pivot,1); #define rotate_left(rbt,pivot) rotate(rbt,pivot,1);
#define rotate_right(rbt,pivot) rotate(rbt,pivot,0); #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_t* rbt, void* kptr, hawk_oow_t klen, void* vptr, hawk_oow_t vlen)
{ {
hawk_rbt_pair_t* pair; hawk_rbt_pair_t* pair;
@@ -120,7 +120,7 @@ HAWK_INLINE hawk_rbt_pair_t* hawk_rbt_allocpair (
return pair; 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]) if (rbt->style->freeer[HAWK_RBT_KEY])
rbt->style->freeer[HAWK_RBT_KEY](rbt, KPTR(pair), KLEN(pair)); 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_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[] = 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 else
{ {
/* need to reconstruct the pair */ /* 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; if (HAWK_UNLIKELY(!p)) return HAWK_NULL;
p->color = pair->color; 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; if (pair == rbt->root) rbt->root = p;
hawk_rbt_freepair(rbt, pair); free_pair(rbt, pair);
return p; 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; 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 (HAWK_UNLIKELY(!x_new)) return HAWK_NULL;
if (x_par == 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)) if (y->color == HAWK_RBT_BLACK && !IS_NIL(rbt,x))
adjust_for_delete(rbt, x, parent); adjust_for_delete(rbt, x, parent);
hawk_rbt_freepair(rbt, y); free_pair(rbt, y);
} }
else 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->left->parent == pair) pair->left->parent = y;
if (pair->right->parent == pair) pair->right->parent = y; if (pair->right->parent == pair) pair->right->parent = y;
hawk_rbt_freepair(rbt, pair); free_pair(rbt, pair);
} }
rbt->size--; rbt->size--;
+12
View File
@@ -139,6 +139,18 @@ function main()
tap_ensure(!!@[1], @true, @SCRIPTNAME, @SCRIPTLINE); tap_ensure(!!@[1], @true, @SCRIPTNAME, @SCRIPTLINE);
tap_ensure(!dummy, @false, @SCRIPTNAME, @SCRIPTLINE); tap_ensure(!dummy, @false, @SCRIPTNAME, @SCRIPTLINE);
tap_ensure(!!dummy, @true, @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", @true), "1", @SCRIPTNAME, @SCRIPTLINE);
tap_ensure(sprintf("%d", @false), "0", @SCRIPTNAME, @SCRIPTLINE); tap_ensure(sprintf("%d", @false), "0", @SCRIPTNAME, @SCRIPTLINE);