diff options
author | Dmitry Stogov <dmitry@zend.com> | 2018-07-30 16:08:45 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2018-07-30 16:08:45 +0300 |
commit | 909f943fe504d412bf3e192182e1e941669b4fd8 (patch) | |
tree | 951dfd8849bfeb939d42b9a9251390d4ce184c31 | |
parent | 9c8b3ae43fc4cfb5818dccc5f48f4ee1ba967fa1 (diff) | |
download | php-git-909f943fe504d412bf3e192182e1e941669b4fd8.tar.gz |
Loop optimization
-rw-r--r-- | Zend/zend_hash.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index fad4b086c2..6c3f6576a3 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -327,19 +327,21 @@ ZEND_API void ZEND_FASTCALL zend_hash_extend(HashTable *ht, uint32_t nSize, zend ZEND_API void ZEND_FASTCALL zend_hash_discard(HashTable *ht, uint32_t nNumUsed) { - uint32_t idx; - Bucket *p; + Bucket *p, *end, *arData; uint32_t nIndex; - for (idx = ht->nNumUsed, p = ht->arData + idx; idx > nNumUsed; idx--) { + arData = ht->arData; + p = arData + ht->nNumUsed; + end = arData + nNumUsed; + ht->nNumUsed = nNumUsed; + while (p != end) { p--; if (UNEXPECTED(Z_TYPE(p->val) == IS_UNDEF)) continue; ht->nNumOfElements--; /* Collision pointers always directed from higher to lower buckets */ nIndex = p->h | ht->nTableMask; - HT_HASH(ht, nIndex) = Z_NEXT(p->val); + HT_HASH_EX(arData, nIndex) = Z_NEXT(p->val); } - ht->nNumUsed = idx; } static uint32_t zend_array_recalc_elements(HashTable *ht) |