summaryrefslogtreecommitdiff
path: root/src/libdcache/dcache_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libdcache/dcache_init.c')
-rw-r--r--src/libdcache/dcache_init.c39
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 ;