summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2018-07-30 16:08:45 +0300
committerDmitry Stogov <dmitry@zend.com>2018-07-30 16:08:45 +0300
commit909f943fe504d412bf3e192182e1e941669b4fd8 (patch)
tree951dfd8849bfeb939d42b9a9251390d4ce184c31
parent9c8b3ae43fc4cfb5818dccc5f48f4ee1ba967fa1 (diff)
downloadphp-git-909f943fe504d412bf3e192182e1e941669b4fd8.tar.gz
Loop optimization
-rw-r--r--Zend/zend_hash.c12
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)