colder Mon Feb 18 23:54:45 2008 UTC Modified files: /php-src/ext/spl spl_dllist.c Log: Add debug_info handler to SplDoublyLinkedList/Stack/Queue to make them var_dump friendly http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_dllist.c?r1=1.9&r2=1.10&diff_format=u Index: php-src/ext/spl/spl_dllist.c diff -u php-src/ext/spl/spl_dllist.c:1.9 php-src/ext/spl/spl_dllist.c:1.10 --- php-src/ext/spl/spl_dllist.c:1.9 Mon Feb 11 16:38:01 2008 +++ php-src/ext/spl/spl_dllist.c Mon Feb 18 23:54:45 2008 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: spl_dllist.c,v 1.9 2008/02/11 16:38:01 colder Exp $ */ +/* $Id: spl_dllist.c,v 1.10 2008/02/18 23:54:45 colder Exp $ */ #ifdef HAVE_CONFIG_H # include "config.h" @@ -473,6 +473,51 @@ } /* }}} */ +static HashTable* spl_dllist_object_get_debug_info(zval *obj, int *is_temp TSRMLS_DC) /* {{{{ */ +{ + spl_dllist_object *intern = (spl_dllist_object*)zend_object_store_get_object(obj TSRMLS_CC); + spl_ptr_llist_element *current = intern->llist->head, *next; + HashTable *rv; + zval *tmp, zrv, *dllist_array; + zstr pnstr; + int pnlen; + int i = 0;; + + *is_temp = 1; + + ALLOC_HASHTABLE(rv); + ZEND_INIT_SYMTABLE_EX(rv, zend_hash_num_elements(intern->std.properties) + 1, 0); + + INIT_PZVAL(&zrv); + Z_ARRVAL(zrv) = rv; + + zend_hash_copy(rv, intern->std.properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); + + pnstr = spl_gen_private_prop_name(spl_ce_SplDoublyLinkedList, "flags", sizeof("flags")-1, &pnlen TSRMLS_CC); + add_u_assoc_long_ex(&zrv, ZEND_STR_TYPE, pnstr, pnlen+1, intern->flags); + efree(pnstr.v); + + ALLOC_INIT_ZVAL(dllist_array); + array_init(dllist_array); + + while (current) { + next = current->next; + + add_index_zval(dllist_array, i, (zval *)current->data); + Z_ADDREF_P(current->data); + i++; + + current = next; + } + + pnstr = spl_gen_private_prop_name(spl_ce_SplDoublyLinkedList, "dllist", sizeof("dllist")-1, &pnlen TSRMLS_CC); + add_u_assoc_zval_ex(&zrv, ZEND_STR_TYPE, pnstr, pnlen+1, dllist_array); + efree(pnstr.v); + + return rv; +} +/* }}}} */ + /* {{{ proto bool SplDoublyLinkedList::push(mixed $value) U Push $value on the SplDoublyLinkedList */ SPL_METHOD(SplDoublyLinkedList, push) @@ -1131,8 +1176,9 @@ REGISTER_SPL_STD_CLASS_EX(SplDoublyLinkedList, spl_dllist_object_new, spl_funcs_SplDoublyLinkedList); memcpy(&spl_handler_SplDoublyLinkedList, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); - spl_handler_SplDoublyLinkedList.clone_obj = spl_dllist_object_clone; + spl_handler_SplDoublyLinkedList.clone_obj = spl_dllist_object_clone; spl_handler_SplDoublyLinkedList.count_elements = spl_dllist_object_count_elements; + spl_handler_SplDoublyLinkedList.get_debug_info = spl_dllist_object_get_debug_info; REGISTER_SPL_CLASS_CONST_LONG(SplDoublyLinkedList, "IT_MODE_LIFO", SPL_DLLIST_IT_LIFO); REGISTER_SPL_CLASS_CONST_LONG(SplDoublyLinkedList, "IT_MODE_FIFO", 0);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php