|
|
|
@ -634,8 +634,16 @@ SPL_METHOD(dual_it, getInnerIterator) |
|
|
|
} |
|
|
|
} /* }}} */ |
|
|
|
|
|
|
|
static INLINE void spl_dual_it_require(spl_dual_it_object *intern TSRMLS_DC) |
|
|
|
{ |
|
|
|
if (!intern->inner.iterator) { |
|
|
|
php_error_docref(NULL TSRMLS_CC, E_ERROR, "The inner constructor wasn't initialized with an iterator instance"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static INLINE void spl_dual_it_free(spl_dual_it_object *intern TSRMLS_DC) |
|
|
|
{ |
|
|
|
spl_dual_it_require(intern TSRMLS_CC); |
|
|
|
if (intern->inner.iterator && intern->inner.iterator->funcs->invalidate_current) { |
|
|
|
intern->inner.iterator->funcs->invalidate_current(intern->inner.iterator TSRMLS_CC); |
|
|
|
} |
|
|
|
@ -698,6 +706,8 @@ static INLINE void spl_dual_it_next(spl_dual_it_object *intern, int do_free TSRM |
|
|
|
{ |
|
|
|
if (do_free) { |
|
|
|
spl_dual_it_free(intern TSRMLS_CC); |
|
|
|
} else { |
|
|
|
spl_dual_it_require(intern TSRMLS_CC); |
|
|
|
} |
|
|
|
intern->inner.iterator->funcs->move_forward(intern->inner.iterator TSRMLS_CC); |
|
|
|
intern->current.pos++; |
|
|
|
|