summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-07-01 08:17:02 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-07-01 08:17:02 +0000
commit5f745b8313acf893e1f782a8b69d4762e8b3fa69 (patch)
tree68b3a7e298461b6d2688cb00fb49f2fde665230b
parentf524211ee81f154230c9f5ae31d1db90add44239 (diff)
struct.c: AREF_HASH_UNIT enum
* 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
-rw-r--r--struct.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/struct.c b/struct.c
index e06d5f0fdc..729b7c2685 100644
--- a/struct.c
+++ b/struct.c
@@ -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));