diff options
Diffstat (limited to 'src/libdcache/dcache_init.c')
-rw-r--r-- | src/libdcache/dcache_init.c | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/src/libdcache/dcache_init.c b/src/libdcache/dcache_init.c index 91c529e..8995f81 100644 --- a/src/libdcache/dcache_init.c +++ b/src/libdcache/dcache_init.c @@ -3,7 +3,7 @@ #include <stdint.h> #include <string.h> -#include <skalibs/uint64.h> +#include <skalibs/uint16.h> #include <skalibs/tai.h> #include <skalibs/gensetdyn.h> #include <skalibs/avltree.h> @@ -12,44 +12,47 @@ static int key_cmp (void const *a, void const *b, void *x) { - dcache_key_t const *ka = a ; - dcache_key_t const *kb = b ; - if (ka->len < kb->len) return -1 ; - if (kb->len < ka->len) return 1 ; - (void)x ; - return memcmp(ka->s, kb->s, ka->len) ; + int r = memcmp(a, b, 4) ; + if (r) return r ; + { + char const *aa = a ; + char const *bb = b ; + uint16_t len ; + uint16_unpack_big(aa+2, &len) ; + return memcmp(aa+4, bb+4, len) ; + } } -static int tain_cmp (void const *a, void const *b, void *x) +static int tai_cmp (void const *a, void const *b, void *x) { - tain const *ta = a ; - tain const *tb = b ; + tai const *ta = a ; + tai const *tb = b ; (void)x ; - return tain_less(ta, tb) ? -1 : tain_less(tb, ta) ; + return tai_less(ta, tb) ? -1 : tai_less(tb, ta) ; } static void *key_dtok (uint32_t d, void *x) { - return &GENSETDYN_P(dcache_node_t, (gensetdyn *)x, d)->key ; + return &GENSETDYN_P(dcache_node, (gensetdyn *)x, d)->sa.s ; } static void *entry_dtok (uint32_t d, void *x) { - return &GENSETDYN_P(dcache_node_t, (gensetdyn *)x, d)->entry ; + return &GENSETDYN_P(dcache_node, (gensetdyn *)x, d)->entry ; } static void *expire_dtok (uint32_t d, void *x) { - return &GENSETDYN_P(dcache_node_t, (gensetdyn *)x, d)->expire ; + return &GENSETDYN_P(dcache_node, (gensetdyn *)x, d)->expire ; } -void dcache_init (dcache_t *z, uint64_t max) +void dcache_init (dcache *z, uint64_t max) { - gensetdyn_init(&z->storage, sizeof(dcache_node_t), max >> 9, 3, 8) ; + gensetdyn_init(&z->storage, sizeof(dcache_node), max >> 9, 3, 8) ; avltree_init(&z->by_key, max >> 9, 3, 8, &key_dtok, &key_cmp, &z->storage) ; - avltree_init(&z->by_entry, max >> 9, 3, 8, &entry_dtok, &tain_cmp, &z->storage) ; - avltree_init(&z->by_expire, max >> 9, 3, 8, &expire_dtok, &tain_cmp, &z->storage) ; + avltree_init(&z->by_entry, max >> 9, 3, 8, &entry_dtok, &tai_cmp, &z->storage) ; + avltree_init(&z->by_expire, max >> 9, 3, 8, &expire_dtok, &tai_cmp, &z->storage) ; z->max = max ; z->size = 0 ; z->motion = 0 ; |