Invercargill.vala 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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> gte<T>(Gee.Iterable<T> input) {
  12. return new GeeEnumerable<T>(input);
  13. }
  14. // public static Enumerable<string> dte(path input) {
  15. // return new DirEnumerable(input);
  16. // }
  17. public static Enumerable<int> range(int from, int to, int increment = 1) {
  18. return new RangeEnumerable(from, to, increment);
  19. }
  20. public static TransformDelegate<Tin, Tout> trycatch<Tin, Tout>(ErrorThrowingDelegate<Tin, Tout> main, ErrorCatchingDelegate<Tin, Tout> handler) {
  21. return (i) => {
  22. try {
  23. return main(i);
  24. }
  25. catch(Error e) {
  26. return handler(i, e);
  27. }
  28. };
  29. }
  30. public static TransformDelegate<Tin, Tout> trydefault<Tin, Tout>(ErrorThrowingDelegate<Tin, Tout> func, Tout default_value) {
  31. return (i) => {
  32. try {
  33. return func(i);
  34. }
  35. catch {
  36. return default_value;
  37. }
  38. };
  39. }
  40. }