Range.vala 890 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. namespace Invercargill.Generators {
  2. internal class Range : Enumerable<int> {
  3. private int start;
  4. private int stride;
  5. private int stop;
  6. public Range(int initial, int end, int stride) {
  7. start = initial;
  8. stop = end;
  9. this.stride = stride;
  10. }
  11. public override int? peek_count() {
  12. return (stop - start) / stride;
  13. }
  14. public override EnumerableInfo get_info() {
  15. return new EnumerableInfo.infer_ultimate (this, EnumerableCategory.COMPUTED);
  16. }
  17. public override Tracker<int> get_tracker() {
  18. var i = start;
  19. return new LambdaTracker<int>(
  20. () => i < stop,
  21. () => {
  22. var val = i;
  23. i += stride;
  24. return val;
  25. });
  26. }
  27. }
  28. }