namespace Invercargill { private class FilterQuery : BaseQuery { private PredicateDelegate predicate_func; public FilterQuery(Enumerable input, owned PredicateDelegate func) { this.input = input; predicate_func = (owned)func; } // public override bool iterate_if (Invercargill.PredicateDelegate handler) { // return input.iterate_if(i => { // if(predicate_func(i)) { // if(!handler(i)) { // return false; // } // } // return true; // }); // } public override Tracker get_tracker() { var tracker = input.get_tracker(); return new AdvanceTracker((out obj) => { while(tracker.has_next()) { var item = tracker.get_next(); if(predicate_func(item)){ obj = item; return true; } } obj = null; return false; }); } } }