]> granicus.if.org Git - php/commitdiff
Revert "Better to taverse reversely"
authorXinchen Hui <laruence@php.net>
Tue, 31 Mar 2015 08:52:30 +0000 (16:52 +0800)
committerXinchen Hui <laruence@php.net>
Tue, 31 Mar 2015 08:52:30 +0000 (16:52 +0800)
This reverts commit 51451ab84ad24430c0e3e3cf67eac297be9cf917.

Zend/zend_hash.c

index 01e51b72a71ee298ac38278f7971821e410d5f7d..1fd3ccf3d96dc0560d5326f8a441db052d7c45b7 100644 (file)
@@ -266,13 +266,14 @@ ZEND_API void ZEND_FASTCALL zend_hash_set_apply_protection(HashTable *ht, zend_b
 
 ZEND_API uint32_t ZEND_FASTCALL zend_hash_iterator_add(HashTable *ht, HashPosition pos)
 {
-       HashTableIterator *iter = EG(ht_iterators) + EG(ht_iterators_used);
+       HashTableIterator *iter = EG(ht_iterators);
+       HashTableIterator *end  = iter + EG(ht_iterators_count);
        uint32_t idx;
 
        if (EXPECTED(ht->u.v.nIteratorsCount != 255)) {
                ht->u.v.nIteratorsCount++;
        }
-       while (iter-- != EG(ht_iterators)) {
+       while (iter != end) {
                if (iter->ht == NULL) {
                        iter->ht = ht;
                        iter->pos = pos;
@@ -282,6 +283,7 @@ ZEND_API uint32_t ZEND_FASTCALL zend_hash_iterator_add(HashTable *ht, HashPositi
                        }
                        return idx;
                }
+               iter++;
        }
        if (EG(ht_iterators) == EG(ht_iterators_slots)) {
                EG(ht_iterators) = emalloc(sizeof(HashTableIterator) * (EG(ht_iterators_count) + 8));
@@ -340,13 +342,15 @@ ZEND_API void ZEND_FASTCALL zend_hash_iterator_del(uint32_t idx)
 
 static zend_never_inline void ZEND_FASTCALL _zend_hash_iterators_remove(HashTable *ht)
 {
-       HashTableIterator *iter = EG(ht_iterators) + EG(ht_iterators_used);
+       HashTableIterator *iter = EG(ht_iterators);
+       HashTableIterator *end  = iter + EG(ht_iterators_used);
        uint32_t idx;
 
-       while (iter-- != EG(ht_iterators)) {
+       while (iter != end) {
                if (iter->ht == ht) {
                        iter->ht = NULL;
                }
+               iter++;
        }
 
        idx = EG(ht_iterators_used);
@@ -365,27 +369,31 @@ static zend_always_inline void zend_hash_iterators_remove(HashTable *ht)
 
 ZEND_API HashPosition ZEND_FASTCALL zend_hash_iterators_lower_pos(HashTable *ht, HashPosition start)
 {
-       HashTableIterator *iter = EG(ht_iterators) + EG(ht_iterators_used);
+       HashTableIterator *iter = EG(ht_iterators);
+       HashTableIterator *end  = iter + EG(ht_iterators_used);
        HashPosition res = HT_INVALID_IDX;
 
-       while (iter-- != EG(ht_iterators)) {
+       while (iter != end) {
                if (iter->ht == ht) {
                        if (iter->pos >= start && iter->pos < res) {
                                res = iter->pos;
                        }
                }
+               iter++;
        }
        return res;
 }
 
 ZEND_API void ZEND_FASTCALL _zend_hash_iterators_update(HashTable *ht, HashPosition from, HashPosition to)
 {
-       HashTableIterator *iter = EG(ht_iterators) + EG(ht_iterators_used);
+       HashTableIterator *iter = EG(ht_iterators);
+       HashTableIterator *end  = iter + EG(ht_iterators_used);
 
-       while (iter-- != EG(ht_iterators)) {
+       while (iter != end) {
                if (iter->ht == ht && iter->pos == from) {
                        iter->pos = to;
                }
+               iter++;
        }
 }