From.vala 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. namespace Invercargill.Modifiers {
  2. public class From<T> : Enumerable<T> {
  3. private Enumerable<T> input;
  4. private PredicateDelegate<T> predicate_func;
  5. public From(Enumerable<T> input, owned PredicateDelegate<T> func) {
  6. this.input = input;
  7. predicate_func = (owned)func;
  8. }
  9. public override uint? peek_count() {
  10. return null;
  11. }
  12. public override EnumerableInfo get_info() {
  13. return new EnumerableInfo.infer_single(this, EnumerableCategory.COMPUTED, input);
  14. }
  15. public override Tracker<T> get_tracker() {
  16. var tracker = input.get_tracker();
  17. var condition_met = false;
  18. return new AdvanceTracker<T>((out obj) => {
  19. obj = null;
  20. do {
  21. if(!tracker.has_next()) {
  22. obj = null;
  23. return false;
  24. }
  25. obj = tracker.get_next ();
  26. } while(!condition_met && !predicate_func(obj));
  27. condition_met = true;
  28. return true;
  29. });
  30. }
  31. }
  32. }