namespace Invercargill.Generators { internal class Range : Enumerable { private int start; private int stride; private int stop; public Range(int initial, int end, int stride) { start = initial; stop = end; this.stride = stride; } public override int? peek_count() { return (stop - start) / stride; } public override EnumerableInfo get_info() { return new EnumerableInfo.infer_ultimate (this, EnumerableCategory.COMPUTED); } public override Tracker get_tracker() { var i = start; return new LambdaTracker( () => i < stop, () => { var val = i; i += stride; return val; }); } } }