scottmac Wed Jun 17 13:27:09 2009 UTC Added files: (Branch: PHP_5_3) /php-src/ext/spl/tests dllist_010.phpt dllist_011.phpt dllist_memleak.phpt
Modified files: /php-src/ext/spl spl_dllist.c Log: MFH Add SplDoublyLinkedList::prev() and fix a memory leak when the iterator pointer isn't at the end http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_dllist.c?r1=1.1.2.18&r2=1.1.2.19&diff_format=u Index: php-src/ext/spl/spl_dllist.c diff -u php-src/ext/spl/spl_dllist.c:1.1.2.18 php-src/ext/spl/spl_dllist.c:1.1.2.19 --- php-src/ext/spl/spl_dllist.c:1.1.2.18 Wed Dec 31 11:15:43 2008 +++ php-src/ext/spl/spl_dllist.c Wed Jun 17 13:27:09 2009 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: spl_dllist.c,v 1.1.2.18 2008/12/31 11:15:43 sebastian Exp $ */ +/* $Id: spl_dllist.c,v 1.1.2.19 2009/06/17 13:27:09 scottmac Exp $ */ #ifdef HAVE_CONFIG_H # include "config.h" @@ -348,6 +348,7 @@ } spl_ptr_llist_destroy(intern->llist TSRMLS_CC); + SPL_LLIST_CHECK_DELREF(intern->traverse_pointer); zval_ptr_dtor(&intern->retval); efree(object); @@ -1036,6 +1037,16 @@ } /* }}} */ +/* {{{ proto void SplDoublyLinkedList::prev() U + Move to next entry */ +SPL_METHOD(SplDoublyLinkedList, prev) +{ + spl_dllist_object *intern = (spl_dllist_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + + spl_dllist_it_helper_move_forward(&intern->traverse_pointer, &intern->traverse_position, intern->llist, intern->flags ^ SPL_DLLIST_IT_LIFO TSRMLS_CC); +} +/* }}} */ + /* {{{ proto void SplDoublyLinkedList::next() U Move to next entry */ SPL_METHOD(SplDoublyLinkedList, next) @@ -1164,6 +1175,7 @@ SPL_ME(SplDoublyLinkedList, current, NULL, ZEND_ACC_PUBLIC) SPL_ME(SplDoublyLinkedList, key, NULL, ZEND_ACC_PUBLIC) SPL_ME(SplDoublyLinkedList, next, NULL, ZEND_ACC_PUBLIC) + SPL_ME(SplDoublyLinkedList, prev, NULL, ZEND_ACC_PUBLIC) SPL_ME(SplDoublyLinkedList, valid, NULL, ZEND_ACC_PUBLIC) {NULL, NULL, NULL} }; http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/dllist_010.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/dllist_010.phpt +++ php-src/ext/spl/tests/dllist_010.phpt --TEST-- SPL: DoublyLinkedList: prev --FILE-- <?php $dll = new SplDoublyLinkedList(); $dll->push(1); $dll->push(2); $dll->push(3); $dll->push(4); $dll->rewind(); echo $dll->current()."\n"; $dll->next(); $dll->next(); echo $dll->current()."\n"; $dll->prev(); echo $dll->current()."\n"; ?> ===DONE=== <?php exit(0); ?> --EXPECTF-- 1 3 2 ===DONE=== http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/dllist_011.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/dllist_011.phpt +++ php-src/ext/spl/tests/dllist_011.phpt --TEST-- SPL: DoublyLinkedList: prev --FILE-- <?php $dll = new SplDoublyLinkedList(); $dll->rewind(); $dll->prev(); var_dump($dll->current()); ?> ===DONE=== --EXPECT-- NULL ===DONE=== http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/dllist_memleak.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/dllist_memleak.phpt +++ php-src/ext/spl/tests/dllist_memleak.phpt --TEST-- SPL: DoublyLinkedList: memory leak when iterator pointer isn't at the last element --FILE-- <?php $dll = new SplDoublyLinkedList(); $dll->push(1); $dll->push(2); $dll->push(3); $dll->push(4); $dll->rewind(); echo $dll->current()."\n"; $dll->next(); $dll->next(); echo $dll->current()."\n"; ?> ===DONE=== <?php exit(0); ?> --EXPECTF-- 1 3 ===DONE=== -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php