ruby-tdb.git  about / heads / tags
Trivial Database bindings for Ruby
blob aab2fc548c9e344bdb7dd7488008263038a9f209 1015 bytes (raw)
$ git show v0.6.0:ext/tdb/hash_functions.c	# shows this blob on the CLI

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
#include "rbtdb.h"

#define HASH_FN(fn) \
static VALUE fn(VALUE self,VALUE str) \
{ \
	TDB_DATA data; \
	StringValue(str); \
	data.dptr = (unsigned char *)RSTRING_PTR(str); \
	data.dsize = RSTRING_LEN(str); \
	return UINT2NUM(rbtdb_##fn(&data)); \
}

HASH_FN(siphash24)
HASH_FN(murmur1)
HASH_FN(murmur1_aligned)
HASH_FN(murmur2)
HASH_FN(murmur2a)
HASH_FN(murmur2_neutral)
HASH_FN(murmur2_aligned)
HASH_FN(murmur3a)
HASH_FN(murmur3f)
HASH_FN(fnv1a)
HASH_FN(djb2)
HASH_FN(djb3)
HASH_FN(jenkins_lookup3)

#define HASH_M(fn) rb_define_method(mHashFunctions, "tdb_hash_"#fn, fn, 1)
void rbtdb_init_tdb_hash_functions(void)
{
	VALUE cTDB = rb_const_get(rb_cObject, rb_intern("TDB"));
	VALUE mHashFunctions = rb_define_module_under(cTDB, "HashFunctions");

	HASH_M(siphash24);
	HASH_M(murmur1);
	HASH_M(murmur1_aligned);
	HASH_M(murmur2);
	HASH_M(murmur2a);
	HASH_M(murmur2_neutral);
	HASH_M(murmur2_aligned);
	HASH_M(murmur3a);
	HASH_M(murmur3f);
	HASH_M(fnv1a);
	HASH_M(djb2);
	HASH_M(djb3);
	HASH_M(jenkins_lookup3);
}

git clone https://yhbt.net/ruby-tdb.git