Iterate.vala 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using Invercargill.DataStructures;
  2. namespace Invercargill.Iterate {
  3. public static Enumerable<T> single<T>(T item) {
  4. var buffer = new Buffer<T>(1);
  5. non_error(() => buffer[0] = item);
  6. return buffer.seal();
  7. }
  8. public static Enumerable<int> range(int from, int to, int increment = 1) {
  9. return new Generators.Range(from, to, increment);
  10. }
  11. public static Enumerable<T> nothing<T>() {
  12. return new Generators.Empty<T>();
  13. }
  14. public static Enumerable<string> directory(string path, uint flags = 0) throws FileError {
  15. return new Generators.Directory(Dir.open(path, flags));
  16. }
  17. public static Enumerable<T> on<T>(Generators.GeneratorDelegate<T> function) {
  18. return new Generators.Function<T>(function);
  19. }
  20. public static Enumerable<T> these<T>(T item1, ...) {
  21. var series = new Series<T>();
  22. var args = va_list();
  23. series.add(item1);
  24. while(true) {
  25. T? item = args.arg<T>();
  26. if(item == null) {
  27. break;
  28. }
  29. series.add(item);
  30. }
  31. return series.seal();
  32. }
  33. }