package php.runtime.lang.spl.iterator;
import php.runtime.Memory;
import php.runtime.env.Environment;
import php.runtime.reflection.ClassEntity;
import static php.runtime.annotation.Reflection.Name;
import static php.runtime.annotation.Reflection.Signature;
@Name("FilterIterator")
abstract public class FilterIterator extends IteratorIterator {
public FilterIterator(Environment env) {
super(env);
}
public FilterIterator(Environment env, ClassEntity clazz) {
super(env, clazz);
}
@Signature
abstract public Memory accept(Environment env, Memory... args);
private void _next(Environment env) {
while (true) {
valid = foreachIterator.next();
if (!valid) {
break;
} else {
valid = env.invokeMethodNoThrow(this, "accept").toBoolean();
if (valid) {
break;
}
}
}
}
@Override
public Memory rewind(Environment env, Memory... args) {
foreachIterator.reset();
_next(env);
return Memory.NULL;
}
@Override
public Memory next(Environment env, Memory... args) {
_next(env);
return Memory.NULL;
}
}