com php-src: Micro optimization for zend_hash_next_index _insert_new(): Zend/zend_hash.c Zend/zend_h ash.h

From: Date: Thu, 16 Oct 2014 15:19:10 +0000
Subject: com php-src: Micro optimization for zend_hash_next_index _insert_new(): Zend/zend_hash.c Zend/zend_h ash.h
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-82378@lists.php.net to get a copy of this message
Commit: 2a1250fa5738d97a215af8b939318013f8ebf926 Author: Dmitry Stogov <dmitry@zend.com> Thu, 16 Oct 2014 19:19:10 +0400 Parents: fc6ce7d1c1852385b35b3a41feb4c47d9e1ce945 Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=2a1250fa5738d97a215af8b939318013f8ebf926 Log: Micro optimization for zend_hash_next_index_insert_new() Changed paths: M Zend/zend_hash.c M Zend/zend_hash.h Diff: diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index 6304737..dfd63aa 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -444,11 +444,15 @@ static zend_always_inline zval *_zend_hash_index_add_or_update_i(HashTable *ht, HANDLE_BLOCK_INTERRUPTIONS(); /* incremental initialization of empty Buckets */ - if (h >= ht->nNumUsed) { - Bucket *q = ht->arData + ht->nNumUsed; - while (q != p) { - ZVAL_UNDEF(&q->val); - q++; + if ((flag & (HASH_ADD_NEW|HASH_ADD_NEXT)) == (HASH_ADD_NEW|HASH_ADD_NEXT)) { + ht->nNumUsed = h + 1; + } else if (h >= ht->nNumUsed) { + if (h > ht->nNumUsed) { + Bucket *q = ht->arData + ht->nNumUsed; + while (q != p) { + ZVAL_UNDEF(&q->val); + q++; + } } ht->nNumUsed = h + 1; } @@ -537,12 +541,12 @@ ZEND_API zval *_zend_hash_index_update(HashTable *ht, zend_ulong h, zval *pData ZEND_API zval *_zend_hash_next_index_insert(HashTable *ht, zval *pData ZEND_FILE_LINE_DC) { - return _zend_hash_index_add_or_update_i(ht, ht->nNextFreeElement, pData, HASH_ADD ZEND_FILE_LINE_RELAY_CC); + return _zend_hash_index_add_or_update_i(ht, ht->nNextFreeElement, pData, HASH_ADD | HASH_ADD_NEXT ZEND_FILE_LINE_RELAY_CC); } ZEND_API zval *_zend_hash_next_index_insert_new(HashTable *ht, zval *pData ZEND_FILE_LINE_DC) { - return _zend_hash_index_add_or_update_i(ht, ht->nNextFreeElement, pData, HASH_ADD | HASH_ADD_NEW ZEND_FILE_LINE_RELAY_CC); + return _zend_hash_index_add_or_update_i(ht, ht->nNextFreeElement, pData, HASH_ADD | HASH_ADD_NEW | HASH_ADD_NEXT ZEND_FILE_LINE_RELAY_CC); } static void zend_hash_do_resize(HashTable *ht) diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h index 5a36ddf..2b9beca 100644 --- a/Zend/zend_hash.h +++ b/Zend/zend_hash.h @@ -32,6 +32,7 @@ #define HASH_ADD (1<<1) #define HASH_UPDATE_INDIRECT (1<<2) #define HASH_ADD_NEW (1<<3) +#define HASH_ADD_NEXT (1<<4) #define INVALID_IDX ((uint32_t) -1)

« previous php.cvs (#82378) next »