summaryrefslogtreecommitdiff
path: root/string.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-08-30 03:02:35 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-08-30 03:02:35 +0000
commit59b1cef2f12112cbd515bf1bcfb8b1997538db48 (patch)
tree0b91be76f32fef5a10f318ed789117290ed6290f /string.c
parent74ef5a647fa0b42e6be22c4734a98150473825c2 (diff)
* numeric.c (flo_hash): improve collision.
* string.c (rb_memhash): new generic function to calculate hash value for memory chunk. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@10798 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'string.c')
-rw-r--r--string.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/string.c b/string.c
index ef065b831f..f6eda3745b 100644
--- a/string.c
+++ b/string.c
@@ -768,9 +768,9 @@ rb_str_concat(VALUE str1, VALUE str2)
/*
* hash_32 - 32 bit Fowler/Noll/Vo FNV-1a hash code
*
- * @(#) $Revision$
- * @(#) $Id$
- * @(#) $Source$
+ * @(#) $hash_32.Revision: 1.1 $
+ * @(#) $hash_32.Id: hash_32a.c,v 1.1 2003/10/03 20:38:53 chongo Exp $
+ * @(#) $hash_32.Source: /usr/local/src/cmd/fnv/RCS/hash_32a.c,v $
*
***
*
@@ -841,10 +841,9 @@ rb_str_concat(VALUE str1, VALUE str2)
#define FNV_32_PRIME 0x01000193
int
-rb_str_hash(VALUE str)
+rb_memhash(const void *ptr, long len)
{
- register long len = RSTRING(str)->len;
- register char *p = RSTRING(str)->ptr;
+ register const unsigned char *p = ptr;
register unsigned int hval = FNV1_32A_INIT;
/*
@@ -864,6 +863,12 @@ rb_str_hash(VALUE str)
return hval;
}
+int
+rb_str_hash(VALUE str)
+{
+ return rb_memhash(RSTRING(str)->ptr, RSTRING(str)->len);
+}
+
/*
* call-seq:
* str.hash => fixnum