зеркало из https://github.com/github/ruby.git
* 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
This commit is contained in:
Родитель
74ef5a647f
Коммит
59b1cef2f1
|
@ -1,3 +1,10 @@
|
|||
Wed Aug 30 12:01:57 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* numeric.c (flo_hash): improve collision.
|
||||
|
||||
* string.c (rb_memhash): new generic function to calculate hash value
|
||||
for memory chunk.
|
||||
|
||||
Tue Aug 29 19:10:10 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* hash.c (rb_hash_s_create): fixed memory leak, based on the patch
|
||||
|
|
1
intern.h
1
intern.h
|
@ -502,6 +502,7 @@ VALUE rb_str_cat(VALUE, const char*, long);
|
|||
VALUE rb_str_cat2(VALUE, const char*);
|
||||
VALUE rb_str_append(VALUE, VALUE);
|
||||
VALUE rb_str_concat(VALUE, VALUE);
|
||||
int rb_memhash(const void *ptr, long len);
|
||||
int rb_str_hash(VALUE);
|
||||
int rb_str_cmp(VALUE, VALUE);
|
||||
VALUE rb_str_upto(VALUE, VALUE, int);
|
||||
|
|
|
@ -836,15 +836,11 @@ static VALUE
|
|||
flo_hash(VALUE num)
|
||||
{
|
||||
double d;
|
||||
char *c;
|
||||
int i, hash;
|
||||
int hash;
|
||||
|
||||
d = RFLOAT(num)->value;
|
||||
if (d == 0) d = fabs(d);
|
||||
c = (char*)&d;
|
||||
for (hash=0, i=0; i<sizeof(double);i++) {
|
||||
hash += c[i] * 971;
|
||||
}
|
||||
hash = rb_memhash(&d, sizeof(d)) ^ RBASIC(num)->klass;
|
||||
if (hash < 0) hash = -hash;
|
||||
return INT2FIX(hash);
|
||||
}
|
||||
|
|
17
string.c
17
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
|
||||
|
|
Загрузка…
Ссылка в новой задаче