SPL_METHOD(SplFixedArray, __wakeup)
{
spl_fixedarray_object *intern = Z_SPLFIXEDARRAY_P(getThis());
- HashPosition ptr;
HashTable *intern_ht = zend_std_get_properties(getThis() TSRMLS_CC);
zval *data;
intern->array = emalloc(sizeof(spl_fixedarray));
spl_fixedarray_init(intern->array, size TSRMLS_CC);
- for (zend_hash_internal_pointer_reset_ex(intern_ht, &ptr); (data = zend_hash_get_current_data_ex(intern_ht, &ptr)) != NULL; zend_hash_move_forward_ex(intern_ht, &ptr)) {
+ ZEND_HASH_FOREACH_VAL(intern_ht, data) {
if (Z_REFCOUNTED_P(data)) {
Z_ADDREF_P(data);
}
- ZVAL_COPY_VALUE(&intern->array->elements[index++], data);
- }
+ ZVAL_COPY_VALUE(&intern->array->elements[index], data);
+ index++;
+ } ZEND_HASH_FOREACH_END();
/* Remove the unserialised properties, since we now have the elements
* within the spl_fixedarray_object structure. */
ulong num_index, max_index = 0;
long tmp;
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(data));
- (element = zend_hash_get_current_data(Z_ARRVAL_P(data))) != NULL;
- zend_hash_move_forward(Z_ARRVAL_P(data))
- ) {
- if (zend_hash_get_current_key(Z_ARRVAL_P(data), &str_index, &num_index, 0) != HASH_KEY_IS_LONG || (long)num_index < 0) {
+ ZEND_HASH_FOREACH_KEY(Z_ARRVAL_P(data), num_index, str_index) {
+ if (str_index != NULL || (long)num_index < 0) {
efree(array);
zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "array must contain only positive integer keys");
return;
if (num_index > max_index) {
max_index = num_index;
}
- }
+ } ZEND_HASH_FOREACH_END();
tmp = max_index + 1;
if (tmp <= 0) {
}
spl_fixedarray_init(array, tmp TSRMLS_CC);
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(data));
- (element = zend_hash_get_current_data(Z_ARRVAL_P(data))) != NULL;
- zend_hash_move_forward(Z_ARRVAL_P(data))
- ) {
-
- zend_hash_get_current_key(Z_ARRVAL_P(data), &str_index, &num_index, 0);
-
+ ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(data), num_index, str_index, element) {
SEPARATE_ARG_IF_REF(element);
ZVAL_COPY_VALUE(&array->elements[num_index], element);
- }
+ } ZEND_HASH_FOREACH_END();
} else if (num > 0 && !save_indexes) {
zval *element;
spl_fixedarray_init(array, num TSRMLS_CC);
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(data));
- (element = zend_hash_get_current_data(Z_ARRVAL_P(data))) != NULL;
- zend_hash_move_forward(Z_ARRVAL_P(data))
- ) {
-
+ ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(data), element) {
SEPARATE_ARG_IF_REF(element);
ZVAL_COPY_VALUE(&array->elements[i], element);
i++;
- }
+ } ZEND_HASH_FOREACH_END();
} else {
spl_fixedarray_init(array, 0 TSRMLS_CC);
}
} /* }}}*/
void spl_object_storage_addall(spl_SplObjectStorage *intern, zval *this, spl_SplObjectStorage *other TSRMLS_DC) { /* {{{ */
- HashPosition pos;
spl_SplObjectStorageElement *element;
- zend_hash_internal_pointer_reset_ex(&other->storage, &pos);
- while ((element = zend_hash_get_current_data_ptr_ex(&other->storage, &pos)) != NULL) {
+ ZEND_HASH_FOREACH_PTR(&other->storage, element) {
spl_object_storage_attach(intern, this, &element->obj, &element->inf TSRMLS_CC);
- zend_hash_move_forward_ex(&other->storage, &pos);
- }
+ } ZEND_HASH_FOREACH_END();
- zend_hash_internal_pointer_reset_ex(&intern->storage, &intern->pos);
intern->index = 0;
} /* }}} */
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(obj);
spl_SplObjectStorageElement *element;
HashTable *props;
- HashPosition pos;
zval tmp, storage;
char md5str[33];
zend_string *zname;
array_init(&storage);
- zend_hash_internal_pointer_reset_ex(&intern->storage, &pos);
- while ((element = zend_hash_get_current_data_ptr_ex(&intern->storage, &pos)) != NULL) {
- php_spl_object_hash(&element->obj, md5str TSRMLS_CC);
- array_init(&tmp);
- /* Incrementing the refcount of obj and inf would confuse the garbage collector.
- * Prefer to null the destructor */
- Z_ARRVAL_P(&tmp)->pDestructor = NULL;
- add_assoc_zval_ex(&tmp, "obj", sizeof("obj") - 1, &element->obj);
- add_assoc_zval_ex(&tmp, "inf", sizeof("inf") - 1, &element->inf);
- add_assoc_zval_ex(&storage, md5str, 32, &tmp);
- zend_hash_move_forward_ex(&intern->storage, &pos);
- }
+ ZEND_HASH_FOREACH_PTR(&intern->storage, element) {
+ php_spl_object_hash(&element->obj, md5str TSRMLS_CC);
+ array_init(&tmp);
+ /* Incrementing the refcount of obj and inf would confuse the garbage collector.
+ * Prefer to null the destructor */
+ Z_ARRVAL_P(&tmp)->pDestructor = NULL;
+ add_assoc_zval_ex(&tmp, "obj", sizeof("obj") - 1, &element->obj);
+ add_assoc_zval_ex(&tmp, "inf", sizeof("inf") - 1, &element->inf);
+ add_assoc_zval_ex(&storage, md5str, 32, &tmp);
+ } ZEND_HASH_FOREACH_END();
zname = spl_gen_private_prop_name(spl_ce_SplObjectStorage, "storage", sizeof("storage")-1 TSRMLS_CC);
zend_symtable_update(intern->debug_info, zname, &storage);
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(obj);
spl_SplObjectStorageElement *element;
HashTable *props;
- HashPosition pos;
zval *gcdata_arr, tmp;
props = std_object_handlers.get_properties(obj TSRMLS_CC);
gcdata_arr = &tmp;
}
- zend_hash_internal_pointer_reset_ex(&intern->storage, &pos);
- while ((element = zend_hash_get_current_data_ptr_ex(&intern->storage, &pos)) != NULL) {
+ ZEND_HASH_FOREACH_PTR(&intern->storage, element) {
add_next_index_zval(gcdata_arr, &element->obj);
add_next_index_zval(gcdata_arr, &element->inf);
- zend_hash_move_forward_ex(&intern->storage, &pos);
- }
+ } ZEND_HASH_FOREACH_END();
return props;
}
other = Z_SPLOBJSTORAGE_P(obj);
- zend_hash_internal_pointer_reset(&intern->storage);
- while ((element = zend_hash_get_current_data_ptr(&intern->storage)) != NULL) {
+ ZEND_HASH_FOREACH_PTR(&intern->storage, element) {
if (!spl_object_storage_contains(other, getThis(), &element->obj TSRMLS_CC)) {
spl_object_storage_detach(intern, getThis(), &element->obj TSRMLS_CC);
}
- zend_hash_move_forward(&intern->storage);
- }
+ } ZEND_HASH_FOREACH_END();
zend_hash_internal_pointer_reset_ex(&intern->storage, &intern->pos);
intern->index = 0;
key = STR_INIT(name, name_length, 0);
zend_is_auto_global(key TSRMLS_CC);
- if ((data = zend_hash_find(&EG(symbol_table).ht, key)) != NULL
- && (Z_TYPE_P(data)==IS_ARRAY)) {
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(data));
- while ((tmp = zend_hash_get_current_data(Z_ARRVAL_P(data))) != NULL) {
+ if ((data = zend_hash_find(&EG(symbol_table).ht, key)) != NULL && (Z_TYPE_P(data) == IS_ARRAY)) {
+ ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(data), num_key, string_key, tmp) {
if (!sapi_module.phpinfo_as_text) {
php_info_print("<tr>");
php_info_print("<td class=\"e\">");
php_info_print(name);
php_info_print("[\"");
- switch (zend_hash_get_current_key(Z_ARRVAL_P(data), &string_key, &num_key, 0)) {
- case HASH_KEY_IS_STRING:
- if (!sapi_module.phpinfo_as_text) {
- php_info_print_html_esc(string_key->val, string_key->len);
- } else {
- php_info_print(string_key->val);
- }
- break;
- case HASH_KEY_IS_LONG:
- php_info_printf("%ld", num_key);
- break;
+ if (string_key != NULL) {
+ if (!sapi_module.phpinfo_as_text) {
+ php_info_print_html_esc(string_key->val, string_key->len);
+ } else {
+ php_info_print(string_key->val);
+ }
+ } else {
+ php_info_printf("%ld", num_key);
}
php_info_print("\"]");
if (!sapi_module.phpinfo_as_text) {
} else {
php_info_print("\n");
}
- zend_hash_move_forward(Z_ARRVAL_P(data));
- }
+ } ZEND_HASH_FOREACH_END();
}
STR_FREE(key);
}