Removed the old hack that was originally developed to support constants in array indeces, and isn't needed anymore after the Bob's patch.

This commit is contained in:
Dmitry Stogov 2014-05-19 01:20:56 +04:00
parent d07c1941ec
commit 21da8af578
2 changed files with 0 additions and 120 deletions

View file

@ -1466,112 +1466,6 @@ ZEND_API zval *zend_hash_get_current_data_ex(HashTable *ht, HashPosition *pos)
}
}
/* This function changes key of current element without changing elements'
* order. If element with target key already exists, it will be deleted first.
*/
ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, zend_string *str_index, ulong num_index, int mode)
{
uint idx1 = ht->nInternalPointer;
uint idx2;
Bucket *p, *q;
ulong h;
#ifdef ZEND_SIGNALS
TSRMLS_FETCH();
#endif
IS_CONSISTENT(ht);
if (idx1 != INVALID_IDX) {
p = ht->arData + idx1;
if (key_type == HASH_KEY_IS_LONG) {
if (p->h == num_index && p->key == NULL) {
return SUCCESS;
}
idx2 = ht->arHash[num_index & ht->nTableMask];
while (idx2 != INVALID_IDX) {
q = ht->arData + idx2;
if (q->h == num_index && q->key == NULL) {
break;
}
idx2 = Z_NEXT(q->val);
}
} else if (key_type == HASH_KEY_IS_STRING) {
h = STR_HASH_VAL(str_index);
if (p->key == str_index ||
(p->h == h &&
p->key &&
p->key->len == str_index->len &&
memcmp(p->key->val, str_index->val, str_index->len) == 0)) {
return SUCCESS;
}
idx2 = ht->arHash[h & ht->nTableMask];
while (idx2 != INVALID_IDX) {
q = ht->arData + idx2;
if (q->key == str_index ||
(q->h == h && q->key && q->key->len == str_index->len &&
memcmp(q->key->val, str_index->val, str_index->len) == 0)) {
break;
}
idx2 = Z_NEXT(q->val);
}
} else {
return FAILURE;
}
HANDLE_BLOCK_INTERRUPTIONS();
if (idx2 != INVALID_IDX) {
/* we have another bucket with the key equal to new one */
if (mode != HASH_UPDATE_KEY_ANYWAY) {
int found = (idx1 < idx2) ? HASH_UPDATE_KEY_IF_BEFORE : HASH_UPDATE_KEY_IF_AFTER;
if (mode & found) {
/* delete current bucket */
_zend_hash_del_el(ht, idx1, p);
HANDLE_UNBLOCK_INTERRUPTIONS();
return FAILURE;
}
}
/* delete another bucket with the same key */
_zend_hash_del_el(ht, idx2, q);
}
/* remove old key from hash */
if (ht->arHash[p->h & ht->nTableMask] == idx1) {
ht->arHash[p->h & ht->nTableMask] = Z_NEXT(p->val);
} else {
uint idx3 = ht->arHash[p->h & ht->nTableMask];
while (Z_NEXT(ht->arData[idx3].val) != idx1) {
idx3 = Z_NEXT(ht->arData[idx3].val);
}
Z_NEXT(ht->arData[idx3].val) = Z_NEXT(p->val);
}
/* update key */
if (p->key) {
STR_RELEASE(p->key);
}
if (key_type == HASH_KEY_IS_LONG) {
p->h = num_index;
p->key = NULL;
} else {
p->h = h;
p->key = str_index;
STR_ADDREF(str_index);
}
/* insert new key into hash */
Z_NEXT(p->val) = ht->arHash[p->h & ht->nTableMask];
ht->arHash[p->h & ht->nTableMask] = idx1;
HANDLE_UNBLOCK_INTERRUPTIONS();
return SUCCESS;
} else {
return FAILURE;
}
}
ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func,
compare_func_t compar, int renumber TSRMLS_DC)
{

View file

@ -35,11 +35,6 @@
#define HASH_NEXT_INSERT (1<<2)
#define HASH_UPDATE_INDIRECT (1<<3)
#define HASH_UPDATE_KEY_IF_NONE 0
#define HASH_UPDATE_KEY_IF_BEFORE 1
#define HASH_UPDATE_KEY_IF_AFTER 2
#define HASH_UPDATE_KEY_ANYWAY 3
#define INVALID_IDX ((uint)-1)
#define HASH_FLAG_PERSISTENT (1<<0)
@ -152,7 +147,6 @@ ZEND_API int zend_hash_get_current_key_type_ex(HashTable *ht, HashPosition *pos)
ZEND_API zval *zend_hash_get_current_data_ex(HashTable *ht, HashPosition *pos);
ZEND_API void zend_hash_internal_pointer_reset_ex(HashTable *ht, HashPosition *pos);
ZEND_API void zend_hash_internal_pointer_end_ex(HashTable *ht, HashPosition *pos);
ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, zend_string *str_index, ulong num_index, int mode);
typedef struct _HashPointer {
HashPosition pos;
@ -181,8 +175,6 @@ ZEND_API int zend_hash_set_pointer(HashTable *ht, const HashPointer *ptr);
zend_hash_internal_pointer_reset_ex(ht, &(ht)->nInternalPointer)
#define zend_hash_internal_pointer_end(ht) \
zend_hash_internal_pointer_end_ex(ht, &(ht)->nInternalPointer)
#define zend_hash_update_current_key(ht, key_type, str_index, str_length, num_index) \
zend_hash_update_current_key_ex(ht, key_type, str_index, str_length, num_index, HASH_UPDATE_KEY_ANYWAY)
/* Copying, merging and sorting */
ZEND_API void zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor);
@ -373,12 +365,6 @@ static inline int zend_symtable_str_exists(HashTable *ht, const char *str, int l
return zend_hash_str_exists(ht, str, len);
}
static inline int zend_symtable_update_current_key_ex(HashTable *ht, zend_string *key, int mode)
{
ZEND_HANDLE_NUMERIC(key->val, key->len+1, zend_hash_update_current_key_ex(ht, HASH_KEY_IS_LONG, NULL, idx, mode));
return zend_hash_update_current_key_ex(ht, HASH_KEY_IS_STRING, key, 0, mode);
}
static inline void *zend_hash_add_ptr(HashTable *ht, zend_string *key, void *pData)
{
zval tmp, *zv;