summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2015-04-21 23:27:44 +0300
committerDmitry Stogov <dmitry@zend.com>2015-04-21 23:27:44 +0300
commitc9da004a1884f54ad69b8b66e585f1ba451e84ee (patch)
tree0a33b0b41a4084fd0b6bf87af770b88c61a3952b
parenta0c07c90f248ffdf11ee8bdf9309107f5776bf54 (diff)
downloadphp-git-c9da004a1884f54ad69b8b66e585f1ba451e84ee.tar.gz
Slight zend_hash_find() optimization.
-rw-r--r--Zend/zend_hash.c13
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);