mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
hash.c: hoisted out dbl_to_index
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66945 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
15530088b6
commit
a94b78e418
1 changed files with 10 additions and 9 deletions
19
hash.c
19
hash.c
|
@ -147,6 +147,14 @@ rb_hash(VALUE obj)
|
|||
|
||||
long rb_objid_hash(st_index_t index);
|
||||
|
||||
static st_index_t
|
||||
dbl_to_index(double d)
|
||||
{
|
||||
union {double d; st_index_t i;} u;
|
||||
u.d = d;
|
||||
return u.i;
|
||||
}
|
||||
|
||||
long
|
||||
rb_dbl_long_hash(double d)
|
||||
{
|
||||
|
@ -155,12 +163,7 @@ rb_dbl_long_hash(double d)
|
|||
#if SIZEOF_INT == SIZEOF_VOIDP
|
||||
return rb_memhash(&d, sizeof(d));
|
||||
#else
|
||||
{
|
||||
union {double d; uint64_t i;} u;
|
||||
|
||||
u.d = d;
|
||||
return rb_objid_hash(u.i);
|
||||
}
|
||||
return rb_objid_hash(dbl_to_index(d));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -293,9 +296,7 @@ rb_ident_hash(st_data_t n)
|
|||
* many integers get interpreted as 2.0 or -2.0 [Bug #10761]
|
||||
*/
|
||||
if (FLONUM_P(n)) {
|
||||
union { double d; st_data_t i; } u;
|
||||
u.d = rb_float_value(n);
|
||||
n ^= u.i;
|
||||
n ^= dbl_to_index(rb_float_value(n));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue