mirror of
https://github.com/ruby/ruby.git
synced 2026-01-27 04:24:23 +00:00
reset bound if the size is 0.
* hash.c (RHASH_AR_TABLE_SIZE_DEC): generally, we need to check all entries to calculate exact "bound" in ar_table, but if size == 0, we can clear bound because there are no active entries. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66843 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
07298ea209
commit
367fdd1aee
20
hash.c
20
hash.c
@ -554,11 +554,21 @@ hash_ar_table_set(VALUE hash, ar_table *ar)
|
||||
} while (0)
|
||||
|
||||
#define RHASH_AR_TABLE_SIZE_INC(h) HASH_AR_TABLE_SIZE_ADD(h, 1)
|
||||
#define RHASH_AR_TABLE_SIZE_DEC(h) do { \
|
||||
HASH_ASSERT(RHASH_AR_TABLE_P(h)); \
|
||||
RHASH_AR_TABLE_SIZE_SET((h), RHASH_AR_TABLE_SIZE(h) - 1); \
|
||||
hash_verify(h); \
|
||||
} while (0)
|
||||
|
||||
static inline void
|
||||
RHASH_AR_TABLE_SIZE_DEC(VALUE h) {
|
||||
HASH_ASSERT(RHASH_AR_TABLE_P(h));
|
||||
int new_size = RHASH_AR_TABLE_SIZE(h) - 1;
|
||||
|
||||
if (new_size != 0) {
|
||||
RHASH_AR_TABLE_SIZE_SET(h, new_size);
|
||||
}
|
||||
else {
|
||||
RHASH_AR_TABLE_SIZE_SET(h, 0);
|
||||
RHASH_AR_TABLE_BOUND_SET(h, 0);
|
||||
}
|
||||
hash_verify(h);
|
||||
}
|
||||
|
||||
#define RHASH_AR_TABLE_CLEAR(h) do { \
|
||||
RBASIC(h)->flags &= ~RHASH_AR_TABLE_SIZE_MASK; \
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user