summaryrefslogtreecommitdiff
path: root/lib/hash.c
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2010-12-16 13:53:29 -0800
committerBen Pfaff <blp@nicira.com>2010-12-17 14:31:40 -0800
commit1f26e79678c9601477c072021598d4d1f5abfb43 (patch)
tree9917d097f12d214e406503cdd3c5c09502ef7811 /lib/hash.c
parentb7b0c62097cbce87b247e30f16e1fbdd1770cca3 (diff)
downloadopenvswitch-1f26e79678c9601477c072021598d4d1f5abfb43.tar.gz
hash: Make functions for hashing a few words easier to use.
It's easier for the client to pass in data directly than it is for the client to stuff it into an array. These functions will have new users in upcoming commits.
Diffstat (limited to 'lib/hash.c')
-rw-r--r--lib/hash.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/lib/hash.c b/lib/hash.c
index 63b4784fc..61e17b278 100644
--- a/lib/hash.c
+++ b/lib/hash.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2009 Nicira Networks.
+ * Copyright (c) 2008, 2009, 2010 Nicira Networks.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -52,21 +52,24 @@ hash_words(const uint32_t *p, size_t n, uint32_t basis)
return c;
}
-/* Returns the hash of the pair of aligned 32-bit words at 'p', starting from
- * 'basis'. */
+/* Returns the hash of 'a', 'b', and 'c'. */
uint32_t
-hash_2words(const uint32_t *p, uint32_t basis)
+hash_3words(uint32_t a, uint32_t b, uint32_t c)
{
- uint32_t a, b, c;
-
- a = b = c = 0xdeadbeef + (2 << 2) + basis;
- b += p[1];
- a += p[0];
+ a += 0xdeadbeef;
+ b += 0xdeadbeef;
+ c += 0xdeadbeef;
HASH_FINAL(a, b, c);
-
return c;
}
+/* Returns the hash of 'a' and 'b'. */
+uint32_t
+hash_2words(uint32_t a, uint32_t b)
+{
+ return hash_3words(a, b, 0);
+}
+
/* Returns the hash of the 'n' bytes at 'p', starting from 'basis'. */
uint32_t
hash_bytes(const void *p_, size_t n, uint32_t basis)