| 123456789101112131415161718192021222324252627282930313233343536373839 |
- namespace Invercargill.Modifiers {
- public class From<T> : Enumerable<T> {
- private Enumerable<T> input;
- private PredicateDelegate<T> predicate_func;
- public From(Enumerable<T> input, owned PredicateDelegate<T> func) {
- this.input = input;
- predicate_func = (owned)func;
- }
- public override uint? peek_count() {
- return null;
- }
- public override EnumerableInfo get_info() {
- return new EnumerableInfo.infer_single(this, EnumerableCategory.COMPUTED, input);
- }
- public override Tracker<T> get_tracker() {
- var tracker = input.get_tracker();
- var condition_met = false;
- return new AdvanceTracker<T>((out obj) => {
- obj = null;
- do {
- if(!tracker.has_next()) {
- obj = null;
- return false;
- }
- obj = tracker.get_next ();
- } while(!condition_met && !predicate_func(obj));
- condition_met = true;
- return true;
- });
- }
- }
- }
|