Class: Object

Inherits:
BasicObject
Defined in:
(unknown)

Class Method Summary collapse

Class Method Details

.hashword(key, len, init) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'ext/hashword_core.c', line 31

VALUE
rb_cObject_hashword(VALUE self, VALUE key, VALUE len, VALUE init) {
  VALUE *k = RARRAY_PTR(key);
  size_t length = (size_t) NUM2UINT(len);
  uint32_t initval = NUM2UINT(init);
  uint32_t a, b, c;

  a = b = c = 0xdeadbeef + (((uint32_t) length) << 2) + initval;

  while (length > 3) {
    a += NUM2UINT(k[0]);
    b += NUM2UINT(k[1]);
    c += NUM2UINT(k[2]);
    mix(a, b, c);
    length -= 3;
    k += 3;
  }

  switch (length) {
  case 3: c += NUM2UINT(k[2]);
  case 2: b += NUM2UINT(k[1]);
  case 1:
    a += NUM2UINT(k[0]);
    final(a, b, c);
    break;
  }

  return UINT2NUM(c);
}