diff options
-rw-r--r-- | Zend/zend_hash.c | 39 | ||||
-rw-r--r-- | Zend/zend_ts_hash.c | 30 | ||||
-rw-r--r-- | Zend/zend_ts_hash.h | 10 |
3 files changed, 64 insertions, 15 deletions
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index 6ffd25f1d3..b97cfb2ba4 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -777,7 +777,16 @@ add_to_hash: ZEND_API zval* ZEND_FASTCALL _zend_hash_add_or_update(HashTable *ht, zend_string *key, zval *pData, uint32_t flag ZEND_FILE_LINE_DC) { - return _zend_hash_add_or_update_i(ht, key, pData, flag ZEND_FILE_LINE_RELAY_CC); + if (flag == HASH_ADD) { + return _zend_hash_add(ht, key, pData ZEND_FILE_LINE_RELAY_CC); + } else if (flag == HASH_ADD_NEW) { + return _zend_hash_add_new(ht, key, pData ZEND_FILE_LINE_RELAY_CC); + } else if (flag == HASH_UPDATE) { + return _zend_hash_update(ht, key, pData ZEND_FILE_LINE_RELAY_CC); + } else { + ZEND_ASSERT(flag == (HASH_UPDATE|HASH_UPDATE_INDIRECT)); + return _zend_hash_update_ind(ht, key, pData ZEND_FILE_LINE_RELAY_CC); + } } ZEND_API zval* ZEND_FASTCALL _zend_hash_add(HashTable *ht, zend_string *key, zval *pData ZEND_FILE_LINE_DC) @@ -802,9 +811,16 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_add_new(HashTable *ht, zend_string *key, ZEND_API zval* ZEND_FASTCALL _zend_hash_str_add_or_update(HashTable *ht, const char *str, size_t len, zval *pData, uint32_t flag ZEND_FILE_LINE_DC) { - zend_ulong h = zend_hash_func(str, len); - - return _zend_hash_str_add_or_update_i(ht, str, len, h, pData, flag ZEND_FILE_LINE_RELAY_CC); + if (flag == HASH_ADD) { + return _zend_hash_str_add(ht, str, len, pData ZEND_FILE_LINE_RELAY_CC); + } else if (flag == HASH_ADD_NEW) { + return _zend_hash_str_add_new(ht, str, len, pData ZEND_FILE_LINE_RELAY_CC); + } else if (flag == HASH_UPDATE) { + return _zend_hash_str_update(ht, str, len, pData ZEND_FILE_LINE_RELAY_CC); + } else { + ZEND_ASSERT(flag == (HASH_UPDATE|HASH_UPDATE_INDIRECT)); + return _zend_hash_str_update_ind(ht, str, len, pData ZEND_FILE_LINE_RELAY_CC); + } } ZEND_API zval* ZEND_FASTCALL _zend_hash_str_update(HashTable *ht, const char *str, size_t len, zval *pData ZEND_FILE_LINE_DC) @@ -945,7 +961,20 @@ add: ZEND_API zval* ZEND_FASTCALL _zend_hash_index_add_or_update(HashTable *ht, zend_ulong h, zval *pData, uint32_t flag ZEND_FILE_LINE_DC) { - return _zend_hash_index_add_or_update_i(ht, h, pData, flag ZEND_FILE_LINE_RELAY_CC); + if (flag == HASH_ADD) { + return _zend_hash_index_add(ht, h, pData ZEND_FILE_LINE_RELAY_CC); + } else if (flag == (HASH_ADD|HASH_ADD_NEW)) { + return _zend_hash_index_add_new(ht, h, pData ZEND_FILE_LINE_RELAY_CC); + } else if (flag == (HASH_ADD|HASH_ADD_NEXT)) { + ZEND_ASSERT(h == ht->nNextFreeElement); + return _zend_hash_next_index_insert(ht, pData ZEND_FILE_LINE_RELAY_CC); + } else if (flag == (HASH_ADD|HASH_ADD_NEW|HASH_ADD_NEXT)) { + ZEND_ASSERT(h == ht->nNextFreeElement); + return _zend_hash_next_index_insert_new(ht, pData ZEND_FILE_LINE_RELAY_CC); + } else { + ZEND_ASSERT(flag == HASH_UPDATE); + return _zend_hash_index_update(ht, h, pData ZEND_FILE_LINE_RELAY_CC); + } } ZEND_API zval* ZEND_FASTCALL _zend_hash_index_add(HashTable *ht, zend_ulong h, zval *pData ZEND_FILE_LINE_DC) diff --git a/Zend/zend_ts_hash.c b/Zend/zend_ts_hash.c index af02af55e8..f5d210b724 100644 --- a/Zend/zend_ts_hash.c +++ b/Zend/zend_ts_hash.c @@ -89,23 +89,45 @@ ZEND_API void zend_ts_hash_clean(TsHashTable *ht) end_write(ht); } -ZEND_API zval *_zend_ts_hash_add_or_update(TsHashTable *ht, zend_string *key, zval *pData, int flag ZEND_FILE_LINE_DC) +ZEND_API zval *_zend_ts_hash_add(TsHashTable *ht, zend_string *key, zval *pData ZEND_FILE_LINE_DC) { zval *retval; begin_write(ht); - retval = _zend_hash_add_or_update(TS_HASH(ht), key, pData, flag ZEND_FILE_LINE_RELAY_CC); + retval = _zend_hash_add(TS_HASH(ht), key, pData ZEND_FILE_LINE_RELAY_CC); end_write(ht); return retval; } -ZEND_API zval *_zend_ts_hash_index_add_or_update(TsHashTable *ht, zend_ulong h, zval *pData, int flag ZEND_FILE_LINE_DC) +ZEND_API zval *_zend_ts_hash_update(TsHashTable *ht, zend_string *key, zval *pData ZEND_FILE_LINE_DC) { zval *retval; begin_write(ht); - retval = _zend_hash_index_add_or_update(TS_HASH(ht), h, pData, flag ZEND_FILE_LINE_RELAY_CC); + retval = _zend_hash_update(TS_HASH(ht), key, pData ZEND_FILE_LINE_RELAY_CC); + end_write(ht); + + return retval; +} + +ZEND_API zval *_zend_ts_hash_next_index_insert(TsHashTable *ht, zval *pData ZEND_FILE_LINE_DC) +{ + zval *retval; + + begin_write(ht); + retval = _zend_hash_next_index_insert(TS_HASH(ht), pData ZEND_FILE_LINE_RELAY_CC); + end_write(ht); + + return retval; +} + +ZEND_API zval *_zend_ts_hash_index_update(TsHashTable *ht, zend_ulong h, zval *pData ZEND_FILE_LINE_DC) +{ + zval *retval; + + begin_write(ht); + retval = _zend_hash_index_update(TS_HASH(ht), h, pData ZEND_FILE_LINE_RELAY_CC); end_write(ht); return retval; diff --git a/Zend/zend_ts_hash.h b/Zend/zend_ts_hash.h index 9806c39ed8..ef882e0820 100644 --- a/Zend/zend_ts_hash.h +++ b/Zend/zend_ts_hash.h @@ -48,17 +48,15 @@ ZEND_API void zend_ts_hash_clean(TsHashTable *ht); /* additions/updates/changes */ -ZEND_API zval *_zend_ts_hash_add_or_update(TsHashTable *ht, zend_string *key, zval *pData, int flag ZEND_FILE_LINE_DC); #define zend_ts_hash_update(ht, key, pData) \ - _zend_ts_hash_add_or_update(ht, key, pData, HASH_UPDATE ZEND_FILE_LINE_CC) + _zend_ts_hash_update(ht, key, pData ZEND_FILE_LINE_CC) #define zend_ts_hash_add(ht, key, pData) \ - _zend_ts_hash_add_or_update(ht, key, pData, HASH_ADD ZEND_FILE_LINE_CC) + _zend_ts_hash_add(ht, key, pData ZEND_FILE_LINE_CC) -ZEND_API zval *_zend_ts_hash_index_add_or_update(TsHashTable *ht, zend_ulong h, zval *pData, int flag ZEND_FILE_LINE_DC); #define zend_ts_hash_index_update(ht, h, pData) \ - _zend_ts_hash_index_add_or_update(ht, h, pData, HASH_UPDATE ZEND_FILE_LINE_CC) + _zend_ts_hash_index_update(ht, h, pData ZEND_FILE_LINE_CC) #define zend_ts_hash_next_index_insert(ht, pData) \ - _zend_ts_hash_index_add_or_update(ht, ht->nNextFreeElement, pData, HASH_ADD ZEND_FILE_LINE_CC) + _zend_ts_hash_next_index_insert(ht, ht->nNextFreeElement, pData ZEND_FILE_LINE_CC) ZEND_API zval* zend_ts_hash_add_empty_element(TsHashTable *ht, zend_string *key); |