]> pd.if.org Git - nbds/blob - datatype/nstring.c
in txn, use a "naked" value without an update record whenever possible
[nbds] / datatype / nstring.c
1 #include "common.h"
2 #include "nstring.h"
3 #include "murmur.h"
4 #include "mem.h"
5
6 const datatype_t DATATYPE_NSTRING = { (cmp_fun_t)ns_cmp, (hash_fun_t)ns_hash, (clone_fun_t)ns_dup };
7
8 nstring_t *ns_alloc (uint32_t len) {
9     nstring_t *ns = nbd_malloc(sizeof(nstring_t) + len);
10     ns->len = len;
11     return ns;
12 }
13
14 int ns_cmp (const nstring_t *ns1, const nstring_t *ns2) {
15     int d = memcmp(ns1->data, ns2->data, (ns1->len < ns2->len) ? ns1->len : ns1->len);
16     return (d == 0) ? ns1->len - ns2->len : d;
17 }
18
19 uint32_t ns_hash (const nstring_t *ns) {
20     return murmur32(ns->data, ns->len);
21 }
22
23 nstring_t *ns_dup (const nstring_t *ns1) {
24     nstring_t *ns2 = ns_alloc(ns1->len);
25     memcpy(ns2->data, ns1->data, ns1->len);
26     return ns2;
27 }