Reverse.vala 710 B

123456789101112131415161718192021222324
  1. namespace Invercargill.Modifiers {
  2. public class Reverse<T> : Enumerable<T> {
  3. private Enumerable<T> input;
  4. public Reverse(Enumerable<T> input) {
  5. this.input = input;
  6. }
  7. public override uint? peek_count() {
  8. return input.peek_count();
  9. }
  10. public override EnumerableInfo get_info() {
  11. return new EnumerableInfo.infer_single(this, EnumerableCategory.COMPUTED, input);
  12. }
  13. public override Tracker<T> get_tracker() {
  14. var items = input.to_immutable_buffer();
  15. return Iterate.range((int)items.length - 1, -1, -1).select<T>(i => items.get_or_default(i)).get_tracker();
  16. }
  17. }
  18. }