opr: Add opr_jhash_int2 function
authorSimon Wilkinson <sxw@your-file-system.com>
Mon, 29 Oct 2012 19:02:03 +0000 (19:02 +0000)
committerDerrick Brashear <shadow@your-file-system.com>
Thu, 1 Nov 2012 18:30:20 +0000 (11:30 -0700)
Add a function to jhash that can be used to hash a pair of unsigned
integers (or other stuff that can cast to them) without having to build
up an array.

Provide a couple of tests for the new function

Change-Id: I594848f64316fb459eff565933691f560512ca79
Reviewed-on: http://gerrit.openafs.org/8354
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
Tested-by: BuildBot <buildbot@rampaginggeek.com>

src/opr/jhash.h
tests/opr/jhash-t.c

index 6e9bc79..5c6e3ad 100644 (file)
@@ -103,6 +103,21 @@ opr_jhash_int(afs_uint32 a, afs_uint32 initval) {
    return c;
 }
 
+/* and one to do two ints */
+
+static_inline afs_uint32
+opr_jhash_int2(afs_uint32 a, afs_uint32 b, afs_uint32 initval)
+{
+   afs_uint32 c;
+
+   a += 0xdeadbeef + 8 + initval;
+   b += 0xdeadbeef + 8 + initval;
+   c =  0xdeadbeef + 8 + initval;
+   opr_jhash_final(a, b, c);
+
+   return c;
+}
+
 static_inline afs_uint32
 opr_jhash_opaque(const void *val, size_t length, afs_uint32 initval)
 {
index c17a7fb..707cd06 100644 (file)
@@ -39,7 +39,7 @@
 int
 main(int argc, char **argv)
 {
-   plan(11);
+   plan(13);
    uint32_t test[] = {3526055646UL, 2064483663UL, 3234460805UL, 3963629775UL};
 
    is_int(256, opr_jhash_size(8), "opr_jhash_size returns expected value");
@@ -57,6 +57,11 @@ main(int argc, char **argv)
    is_int(1100796964, opr_jhash_int(test[0], 0),
           "single value works through jhash_int");
 
+   is_int(3704403432, opr_jhash(test, 2, 0),
+         "Hashing two values works");
+   is_int(3704403432, opr_jhash_int2(test[0], test[1], 0),
+         "jhash_int2 gives same result");
+
    is_int(0xdeadbeef, opr_jhash_opaque("", 0, 0),
          "Hashing an empty string works");