]> pd.if.org Git - nbds/blobdiff - struct/nstring.c
make skiplist and list use strings for keys (slower by 2x...sigh)
[nbds] / struct / nstring.c
diff --git a/struct/nstring.c b/struct/nstring.c
new file mode 100644 (file)
index 0000000..840c6df
--- /dev/null
@@ -0,0 +1,24 @@
+#include "common.h"
+#include "nstring.h"
+#include "mem.h"
+
+struct nstring {
+    uint32_t len;
+    char data[];
+};
+
+nstring_t *ns_alloc (const void *data, uint32_t len) {
+    nstring_t *ns = nbd_malloc(sizeof(nstring_t) + len);
+    ns->len = len;
+    memcpy(ns->data, data, len);
+    return ns;
+}
+
+int ns_cmp_raw (nstring_t *ns, const void *data, uint32_t len) {
+    int rc = memcmp(ns->data, data, (len < ns->len) ? len : ns->len);
+    return (rc == 0) ? ns->len - len : rc;
+}
+
+const void *ns_data (nstring_t *ns) { return ns->data; }
+
+uint64_t    ns_len  (nstring_t *ns) { return ns->len; }