]> granicus.if.org Git - php/commitdiff
- Add AppendIterator::getIteratorIndex
authorMarcus Boerger <helly@php.net>
Sat, 29 Oct 2005 15:37:57 +0000 (15:37 +0000)
committerMarcus Boerger <helly@php.net>
Sat, 29 Oct 2005 15:37:57 +0000 (15:37 +0000)
- Add AppendIterator::getArrayIterator

ext/spl/spl_array.c
ext/spl/spl_array.h
ext/spl/spl_iterators.c

index dabbd3e2780ae6d22ed1c26ba142892a06bdbc5b..d428699f2a7324179a8453a9438b84aafee07414 100755 (executable)
@@ -1151,7 +1151,11 @@ SPL_METHOD(Array, current)
    Return current array key */
 SPL_METHOD(Array, key)
 {
-       zval *object = getThis();
+       spl_array_iterator_key(getThis(), return_value TSRMLS_CC);
+}
+
+void spl_array_iterator_key(zval *object, zval *return_value TSRMLS_DC) /* {{{ */
+{
        spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
        char *string_key;
        uint string_length;
index 34dedc78dd4182917bdcff0e2a947b224a05d779..639303bf0fe62a4799e6c17b81c306b16dbb9c4d 100755 (executable)
@@ -32,6 +32,7 @@ extern PHPAPI zend_class_entry *spl_ce_Countable;
 PHP_MINIT_FUNCTION(spl_array);
 
 extern void spl_array_iterator_append(zval *object, zval *append_value TSRMLS_DC);
+extern void spl_array_iterator_key(zval *object, zval *return_value TSRMLS_DC);
 
 #endif /* SPL_ARRAY_H */
 
index ee42093922ad3af313ca25a0e5bf2463b49f73ed..4670531e57d47f8a40c996d8e3fe6fdddbdce434 100755 (executable)
@@ -2199,7 +2199,6 @@ int spl_append_it_next_iterator(spl_dual_it_object *intern TSRMLS_DC) /* {{{*/
                intern->inner.object = zend_object_store_get_object(*it TSRMLS_CC);
                intern->inner.iterator = intern->inner.ce->get_iterator(intern->inner.ce, *it TSRMLS_CC);
                spl_dual_it_rewind(intern TSRMLS_CC);
-               intern->u.append.iterator->funcs->move_forward(intern->u.append.iterator TSRMLS_CC);
                return SUCCESS;
        } else {
                return FAILURE;
@@ -2209,6 +2208,7 @@ int spl_append_it_next_iterator(spl_dual_it_object *intern TSRMLS_DC) /* {{{*/
 void spl_append_it_fetch(spl_dual_it_object *intern TSRMLS_DC) /* {{{*/
 {
        while (spl_dual_it_valid(intern TSRMLS_CC) != SUCCESS) {
+               intern->u.append.iterator->funcs->move_forward(intern->u.append.iterator TSRMLS_CC);
                if (spl_append_it_next_iterator(intern TSRMLS_CC) != SUCCESS) {
                        return;
                }
@@ -2292,6 +2292,28 @@ SPL_METHOD(AppendIterator, next)
        spl_append_it_next(intern TSRMLS_CC);
 } /* }}} */
 
+/* {{{ proto AppendIterator::getIteratorIndex()
+   Get index of iterator */
+SPL_METHOD(AppendIterator, getIteratorIndex)
+{
+       spl_dual_it_object   *intern;
+
+       intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+
+       spl_array_iterator_key(intern->u.append.zarrayit, return_value TSRMLS_CC);
+} /* }}} */
+
+/* {{{ proto AppendIterator::getArrayIterator()
+   Get access to inner ArrayIterator */
+SPL_METHOD(AppendIterator, getArrayIterator)
+{
+       spl_dual_it_object   *intern;
+
+       intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+
+       RETURN_ZVAL(intern->u.append.zarrayit, 1, 0);
+} /* }}} */
+
 static
 ZEND_BEGIN_ARG_INFO(arginfo_append_it_append, 0) 
        ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
@@ -2306,6 +2328,8 @@ static zend_function_entry spl_funcs_AppendIterator[] = {
        SPL_ME(dual_it,        current,          NULL, ZEND_ACC_PUBLIC)
        SPL_ME(AppendIterator, next,             NULL, ZEND_ACC_PUBLIC)
        SPL_ME(dual_it,        getInnerIterator, NULL, ZEND_ACC_PUBLIC)
+       SPL_ME(AppendIterator, getIteratorIndex, NULL, ZEND_ACC_PUBLIC)
+       SPL_ME(AppendIterator, getArrayIterator, NULL, ZEND_ACC_PUBLIC)
        {NULL, NULL, NULL}
 };