From: Attractive Chaos Date: Fri, 26 Mar 2021 02:58:27 +0000 (-0400) Subject: added kavll_size() X-Git-Url: http://www.kaiwu.me/postgresql/commit/static/gitweb.js?a=commitdiff_plain;h=c740c397e0e59f2c9d0e2d0d757625c7b6bb885e;p=klib.git added kavll_size() --- diff --git a/kavl-lite.h b/kavl-lite.h index 354e90d..240ac8a 100644 --- a/kavl-lite.h +++ b/kavl-lite.h @@ -236,6 +236,21 @@ int main(void) { } \ } while (0) +#define kavll_size(__type, __head, __root, __cnt) do { \ + __type *_p, *_q; \ + *(__cnt) = 0; \ + for (_p = __root; _p; _p = _q) { \ + if (_p->__head.p[0] == 0) { \ + _q = _p->__head.p[1]; \ + ++*(__cnt); \ + } else { \ + _q = _p->__head.p[0]; \ + _p->__head.p[0] = _q->__head.p[1]; \ + _q->__head.p[1] = _p; \ + } \ + } \ + } while (0) + #define __KAVLL_ITR(pre, __scope, __type, __head, __cmp) \ typedef struct pre##_itr_t { \ const __type *stack[KAVLL_MAX_DEPTH], **top, *right; /* _right_ points to the right child of *top */ \