summaryrefslogtreecommitdiffstats
path: root/range.c
diff options
context:
space:
mode:
authormame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-14 19:55:34 +0000
committermame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-14 19:55:34 +0000
commit2dec07424eaeade587740f1d2751986a36ea70f1 (patch)
tree704a4bf758367e8c8b7100dd0cb2c5e8dd26c6b9 /range.c
parent603e226d2dbffd3a91bbcf47775e8137a9889ff2 (diff)
downloadruby-2dec07424eaeade587740f1d2751986a36ea70f1.tar.gz
ruby-2dec07424eaeade587740f1d2751986a36ea70f1.tar.xz
ruby-2dec07424eaeade587740f1d2751986a36ea70f1.zip
* string.c (rb_hash_uint32, rb_hash_uint, rb_hash_start, rb_hash_end),
include/ruby/intern.h: add Murmurhash API. [ruby-dev:37784] * complex.c (nucomp_hash), array.c (rb_ary_hash), time.c (time_hash), string.c (rb_str_hsah), object.c (rb_obj_hash), range.c (range_hash), struct.c (rb_struct_hash), hash.c (rb_any_hash), rational.c (nurat_hash): use Murmurhash. [ruby-dev:37784] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@22317 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'range.c')
-rw-r--r--range.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/range.c b/range.c
index 74f9e569f..4c9fa869f 100644
--- a/range.c
+++ b/range.c
@@ -213,14 +213,16 @@ range_eql(VALUE range, VALUE obj)
static VALUE
range_hash(VALUE range)
{
- long hash = EXCL(range);
+ unsigned hash = EXCL(range);
VALUE v;
+ hash = rb_hash_start(hash);
v = rb_hash(RANGE_BEG(range));
- hash ^= v << 1;
+ hash = rb_hash_uint(hash, NUM2LONG(v));
v = rb_hash(RANGE_END(range));
- hash ^= v << 9;
- hash ^= EXCL(range) << 24;
+ hash = rb_hash_uint(hash, NUM2LONG(v));
+ hash = rb_hash_uint(hash, EXCL(range) << 24);
+ hash = rb_hash_end(hash);
return LONG2FIX(hash);
}