andrei Tue Jul 11 17:59:47 2006 UTC Modified files: /php-src/ext/unicode unicode_iterators.c Log: Make next() and previous() take optional step parameter and optimize return value usage. http://cvs.php.net/viewvc.cgi/php-src/ext/unicode/unicode_iterators.c?r1=1.41&r2=1.42&diff_format=u Index: php-src/ext/unicode/unicode_iterators.c diff -u php-src/ext/unicode/unicode_iterators.c:1.41 php-src/ext/unicode/unicode_iterators.c:1.42 --- php-src/ext/unicode/unicode_iterators.c:1.41 Tue Jul 11 17:48:14 2006 +++ php-src/ext/unicode/unicode_iterators.c Tue Jul 11 17:59:46 2006 @@ -14,7 +14,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: unicode_iterators.c,v 1.41 2006/07/11 17:48:14 andrei Exp $ */ +/* $Id: unicode_iterators.c,v 1.42 2006/07/11 17:59:46 andrei Exp $ */ /* * TODO @@ -1035,11 +1035,25 @@ PHP_METHOD(TextIterator, next) { + long i, step = 1; zval *object = getThis(); text_iter_obj *intern = (text_iter_obj*) zend_object_store_get_object(object TSRMLS_CC); - iter_ops[intern->type]->next(intern, intern->flags TSRMLS_CC); - RETURN_LONG(iter_ops[intern->type]->offset(intern, intern->flags TSRMLS_CC)); + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &step) == FAILURE) { + return; + } + + if (step <= 0) { + step = 1; + } + + for (i = 0; i < step; i++) { + iter_ops[intern->type]->next(intern, intern->flags TSRMLS_CC); + } + + if (return_value_used) { + RETURN_LONG(iter_ops[intern->type]->offset(intern, intern->flags TSRMLS_CC)); + } } PHP_METHOD(TextIterator, key) @@ -1088,13 +1102,26 @@ PHP_METHOD(TextIterator, previous) { - long flags; + long flags, i, step = 1; zval *object = getThis(); text_iter_obj *intern = (text_iter_obj*) zend_object_store_get_object(object TSRMLS_CC); + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &step) == FAILURE) { + return; + } + + if (step <= 0) { + step = 1; + } flags = intern->flags ^ ITER_REVERSE; - iter_ops[intern->type]->next(intern, flags TSRMLS_CC); - RETURN_LONG(iter_ops[intern->type]->offset(intern, flags TSRMLS_CC)); + + for (i = 0; i < step; i++) { + iter_ops[intern->type]->next(intern, flags TSRMLS_CC); + } + + if (return_value_used) { + RETURN_LONG(iter_ops[intern->type]->offset(intern, flags TSRMLS_CC)); + } } PHP_METHOD(TextIterator, following)
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php