Invercargill.vala 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. namespace Invercargill {
  2. public static Enumerable<T> ate<T>(T[] input) {
  3. if(typeof(T).is_value_type()) {
  4. // LibGee has already done the hard work around
  5. // Vala's funkyness with arrays of type arguments
  6. var gee = new Gee.ArrayList<T>.wrap(input);
  7. return new GeeEnumerable<T>(gee);
  8. }
  9. return new ArrayEnumerable<T>(input);
  10. }
  11. public static Enumerable<T> gate<T>(GenericArray<T> input) {
  12. return new GenericArrayEnumerable<T>(input);
  13. }
  14. public static Enumerable<T> gte<T>(Gee.Iterable<T> input) {
  15. return new GeeEnumerable<T>(input);
  16. }
  17. // public static Enumerable<string> dte(path input) {
  18. // return new DirEnumerable(input);
  19. // }
  20. public static Enumerable<int> range(int from, int to, int increment = 1) {
  21. return new RangeEnumerable(from, to, increment);
  22. }
  23. public static Enumerable<T> empty<T>() {
  24. return new EmptyEnumerable<T>();
  25. }
  26. public static Enumerable<T> single<T>(T item) {
  27. var seq = new Invercargill.Series<T>();
  28. seq.add(item);
  29. return seq;
  30. }
  31. public static TransformDelegate<Tin, Tout> trycatch<Tin, Tout>(ErrorThrowingDelegate<Tin, Tout> main, ErrorCatchingDelegate<Tin, Tout> handler) {
  32. return (i) => {
  33. try {
  34. return main(i);
  35. }
  36. catch(Error e) {
  37. return handler(i, e);
  38. }
  39. };
  40. }
  41. public static TransformDelegate<Tin, Tout> trydefault<Tin, Tout>(ErrorThrowingDelegate<Tin, Tout> func, Tout default_value) {
  42. return (i) => {
  43. try {
  44. return func(i);
  45. }
  46. catch {
  47. return default_value;
  48. }
  49. };
  50. }
  51. }