diff options
author | Dmitry Stogov <dmitry@zend.com> | 2015-04-21 23:27:44 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2015-04-21 23:27:44 +0300 |
commit | c9da004a1884f54ad69b8b66e585f1ba451e84ee (patch) | |
tree | 0a33b0b41a4084fd0b6bf87af770b88c61a3952b | |
parent | a0c07c90f248ffdf11ee8bdf9309107f5776bf54 (diff) | |
download | php-git-c9da004a1884f54ad69b8b66e585f1ba451e84ee.tar.gz |
Slight zend_hash_find() optimization.
-rw-r--r-- | Zend/zend_hash.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index 0dba9f39de..fcb51f6a2f 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -408,13 +408,14 @@ static zend_always_inline Bucket *zend_hash_find_bucket(const HashTable *ht, zen arData = ht->arData; nIndex = h | ht->nTableMask; idx = HT_HASH_EX(arData, nIndex); - while (idx != HT_INVALID_IDX) { + while (EXPECTED(idx != HT_INVALID_IDX)) { p = HT_HASH_TO_BUCKET_EX(arData, idx); - if (p->key == key || /* check for the the same interned string */ - (p->h == h && - p->key && - p->key->len == key->len && - memcmp(p->key->val, key->val, key->len) == 0)) { + if (EXPECTED(p->key == key)) { /* check for the the same interned string */ + return p; + } else if (EXPECTED(p->h == h) && + EXPECTED(p->key) && + EXPECTED(p->key->len == key->len) && + EXPECTED(memcmp(p->key->val, key->val, key->len) == 0)) { return p; } idx = Z_NEXT(p->val); |