Browse Source

Add empty utility function and add to_string enumerable function`

Billy Barrow 2 years ago
parent
commit
09802288cc
4 changed files with 35 additions and 1 deletions
  1. 18 0
      src/lib/Concrete/EmptyEnumerable.vala
  2. 12 1
      src/lib/Enumerable.vala
  3. 4 0
      src/lib/Invercargill.vala
  4. 1 0
      src/lib/meson.build

+ 18 - 0
src/lib/Concrete/EmptyEnumerable.vala

@@ -0,0 +1,18 @@
+
+namespace Invercargill {
+
+    internal class EmptyEnumerable<T> : Enumerable<T> {
+
+        public override Tracker<T> get_tracker() {
+            return new LambdaTracker<T>(
+                () => {
+                    return false;
+                },
+                () => {
+                    assert_not_reached();
+                });
+        }
+
+    }
+
+}

+ 12 - 1
src/lib/Enumerable.vala

@@ -99,7 +99,7 @@ namespace Invercargill {
             return new SkipQuery<T>(this, count);
         }
 
-        public virtual Tout aggrigate<Tout>(Tout initial, AggrigateDelegate aggrigate_func) {
+        public virtual Tout aggrigate<Tout>(Tout initial, AggrigateDelegate<Tout, T> aggrigate_func) {
             var aggrigate = initial;
             iterate(i => {
                 aggrigate = aggrigate_func(aggrigate, i);
@@ -178,6 +178,17 @@ namespace Invercargill {
             return null;
         }
 
+        public virtual string to_string(TransformDelegate<T, string> stringifier, string seperator = "") {
+            bool is_first = false;
+            return aggrigate<string>("", (s, v) => {
+                if(is_first) {
+                    is_first = true;
+                    return stringifier(v);
+                }
+                return s + seperator + stringifier(v);
+            });
+        }
+
     }
 
 }

+ 4 - 0
src/lib/Invercargill.vala

@@ -24,6 +24,10 @@ namespace Invercargill {
         return new RangeEnumerable(from, to, increment);
     }
 
+    public static Enumerable<T> empty<T>() {
+        return new EmptyEnumerable<T>();
+    }
+
     public static TransformDelegate<Tin, Tout> trycatch<Tin, Tout>(ErrorThrowingDelegate<Tin, Tout> main, ErrorCatchingDelegate<Tin, Tout> handler) {
         return (i) => {
             try {

+ 1 - 0
src/lib/meson.build

@@ -30,6 +30,7 @@ sources += files('Concrete/ConcatEnumerable.vala')
 sources += files('Concrete/PairEnumerable.vala')
 sources += files('Concrete/DirEnumerable.vala')
 sources += files('Concrete/ZipperEnumerable.vala')
+sources += files('Concrete/EmptyEnumerable.vala')
 sources += files('Concrete/Sequence.vala')
 
 invercargill = shared_library('invercargill', sources,