summary refs log tree commit diff
path: root/src/libstddjb/cdb_find.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2021-07-24 15:41:18 +0000
committerLaurent Bercot <ska@appnovation.com>2021-07-24 15:41:18 +0000
commit4414a4b9d8495320e54eaae05572a30b25b4401c (patch)
treea65e3e411a0ef4a92b00b626d43ef03d12be5fbf /src/libstddjb/cdb_find.c
parentd6f7078aab3050629a63d9b9d92f30e1ca5a9aa1 (diff)
downloadskalibs-4414a4b9d8495320e54eaae05572a30b25b4401c.tar.gz
skalibs-4414a4b9d8495320e54eaae05572a30b25b4401c.tar.xz
skalibs-4414a4b9d8495320e54eaae05572a30b25b4401c.zip
Hide cdb_find_state in the common case
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src/libstddjb/cdb_find.c')
-rw-r--r--src/libstddjb/cdb_find.c54
1 files changed, 3 insertions, 51 deletions
diff --git a/src/libstddjb/cdb_find.c b/src/libstddjb/cdb_find.c
index af642cc..ebf900d 100644
--- a/src/libstddjb/cdb_find.c
+++ b/src/libstddjb/cdb_find.c
@@ -1,57 +1,9 @@
 /* ISC license. */
 
-#include <stdint.h>
-#include <string.h>
-
-#include <skalibs/uint32.h>
 #include <skalibs/cdb.h>
-#include "cdb-internal.h"
 
-int cdb_find (cdb const *c, cdb_data *out, char const *key, uint32_t len, cdb_find_state *d)
+int cdb_find (cdb const *c, cdb_data *out, char const *key, uint32_t len)
 {
-  if (!d->loop)
-  {
-    uint32_t u = cdb_hash(key, len) ;
-    char const *p = cdb_p(c, 8, (u << 3) & 2047) ;
-    if (!p) return -1 ;
-    uint32_unpack(p + 4, &d->hslots) ;
-    if (!d->hslots) return 0 ;
-    uint32_unpack(p, &d->hpos) ;
-    d->khash = u ;
-    u >>= 8 ;
-    u %= d->hslots ;
-    u <<= 3 ;
-    d->kpos = d->hpos + u ;
-  }
-
-  while (d->loop < d->hslots)
-  {
-    uint32_t pos, u ;
-    char const *p = cdb_p(c, 8, d->kpos) ;
-    if (!p) return -1 ;
-    uint32_unpack(p + 4, &pos) ;
-    if (!pos) return 0 ;
-    d->loop++ ;
-    d->kpos += 8 ;
-    if (d->kpos == d->hpos + (d->hslots << 3)) d->kpos = d->hpos ;
-    uint32_unpack(p, &u) ;
-    if (u == d->khash)
-    {
-      p = cdb_p(c, 8, pos) ;
-      if (!p) return -1 ;
-      uint32_unpack(p, &u) ;
-      if (u == len)
-      {
-        char const *k = cdb_p(c, len, pos + 8) ;
-        if (!k) return -1 ;
-        if (!memcmp(key, k, len))
-        {
-          uint32_unpack(p + 4, &out->len) ;
-          out->s = c->map + pos + 8 + len ;
-          return 1 ;
-        }
-      }
-    }
-  }
-  return 0 ;
+  cdb_find_state cfs = CDB_FIND_STATE_ZERO ;
+  return cdb_findnext(c, out, key, len, &cfs) ;
 }