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