From 47501f16596d2eaac9ce1a27b43b386b8496c66f Mon Sep 17 00:00:00 2001 From: Graydon Hoare Date: Tue, 24 Aug 2010 09:59:02 -0700 Subject: [PATCH] Make _str.eq suitable for map.hashmap; add _str.hash that does simple djb-hash. --- src/lib/_str.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/lib/_str.rs b/src/lib/_str.rs index a29e1daac6b..751d79cfc87 100644 --- a/src/lib/_str.rs +++ b/src/lib/_str.rs @@ -11,7 +11,7 @@ native "rust" mod rustrt { fn refcount[T](str s) -> uint; } -fn eq(str a, str b) -> bool { +fn eq(&str a, &str b) -> bool { let uint i = byte_len(a); if (byte_len(b) != i) { ret false; @@ -27,6 +27,17 @@ fn eq(str a, str b) -> bool { ret true; } +fn hash(&str s) -> uint { + // djb hash. + // FIXME: replace with murmur. + let uint u = 5381u; + for (u8 c in s) { + u *= 33u; + u += (c as uint); + } + ret u; +} + fn is_utf8(vec[u8] v) -> bool { fail; // FIXME }