Take.vala 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. namespace Invercargill {
  2. private class TakeQuery<T> : BaseQuery<T, T> {
  3. private int n_items {get; set;}
  4. public TakeQuery(Enumerable<T> input, int count) {
  5. this.input = input;
  6. n_items = count;
  7. }
  8. // public override bool iterate_if (Invercargill.PredicateDelegate<T> handler) {
  9. // var c = 0;
  10. // return input.iterate_if(i => {
  11. // if(c < n_items) {
  12. // c++;
  13. // return handler(i);
  14. // }
  15. // return false;
  16. // });
  17. // }
  18. public override Tracker<T> to_tracker() {
  19. var tracker = input.to_tracker();
  20. var c = 0;
  21. return new LambdaTracker<T>(
  22. () => {
  23. if(c < n_items) {
  24. return tracker.has_next();
  25. }
  26. return false;
  27. },
  28. () => {
  29. c++;
  30. return tracker.get_next();
  31. }
  32. );
  33. }
  34. }
  35. }