* struct.c (AREF_HASH_UNIT): name a magic number, which is shared
  by struct_member_pos_probe and struct_set_members.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51085 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2015-07-01 08:17:02 +00:00
Родитель f524211ee8
Коммит 5f745b8313
1 изменённых файлов: 4 добавлений и 3 удалений

Просмотреть файл

@ -15,6 +15,7 @@
/* only for struct[:field] access */
enum {
AREF_HASH_UNIT = 5,
AREF_HASH_THRESHOLD = 10
};
@ -82,8 +83,8 @@ struct_member_pos_ideal(VALUE name, long mask)
static long
struct_member_pos_probe(long prev, long mask)
{
/* (((prev/2) * 5 + 1) & (mask/2)) * 2 */
return (prev * 5 + 2) & mask;
/* (((prev/2) * AREF_HASH_UNIT + 1) & (mask/2)) * 2 */
return (prev * AREF_HASH_UNIT + 2) & mask;
}
static VALUE
@ -99,7 +100,7 @@ struct_set_members(VALUE klass, VALUE /* frozen hidden array */ members)
long i, j, mask = 64;
VALUE name;
while (mask < members_length * 5) mask *= 2;
while (mask < members_length * AREF_HASH_UNIT) mask *= 2;
back = rb_ary_tmp_new(mask + 1);
rb_ary_store(back, mask, INT2FIX(members_length));