Index: ext/spl/tests/dllist_010.phpt =================================================================== RCS file: ext/spl/tests/dllist_010.phpt diff -N ext/spl/tests/dllist_010.phpt --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ ext/spl/tests/dllist_010.phpt 16 Jun 2009 17:34:14 -0000 @@ -0,0 +1,27 @@ +--TEST-- +SPL: DoublyLinkedList: prev +--FILE-- +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=== + +--EXPECTF-- +1 +3 +2 +===DONE=== Index: ext/spl/spl_dllist.c =================================================================== RCS file: /repository/php-src/ext/spl/spl_dllist.c,v retrieving revision 1.20 diff -u -p -r1.20 spl_dllist.c --- ext/spl/spl_dllist.c 26 Mar 2009 20:02:12 -0000 1.20 +++ ext/spl/spl_dllist.c 16 Jun 2009 17:34:14 -0000 @@ -350,6 +350,7 @@ static void spl_dllist_object_free_stora } spl_ptr_llist_destroy(intern->llist TSRMLS_CC); + SPL_LLIST_CHECK_DELREF(intern->traverse_pointer); zval_ptr_dtor(&intern->retval); efree(object); @@ -1043,6 +1044,16 @@ SPL_METHOD(SplDoublyLinkedList, next) } /* }}} */ +/* {{{ 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 bool SplDoublyLinkedList::valid() U Check whether the datastructure contains more entries */ SPL_METHOD(SplDoublyLinkedList, valid) @@ -1161,6 +1172,7 @@ static const zend_function_entry spl_fun 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} };