namespace Invercargill.Modifiers { public class Reverse : Enumerable { private Enumerable input; public Reverse(Enumerable input) { this.input = input; } public override uint? peek_count() { return input.peek_count(); } public override EnumerableInfo get_info() { return new EnumerableInfo.infer_single(this, EnumerableCategory.COMPUTED, input); } public override Tracker get_tracker() { var items = input.to_immutable_buffer(); return Iterate.range((int)items.length - 1, -1, -1).select(i => items.get_or_default(i)).get_tracker(); } } }