Explorar el Código

Add "deferred" iterate function

Billy Barrow hace 2 semanas
padre
commit
df211263fd

+ 26 - 0
src/lib/Generators/Deferred.vala

@@ -0,0 +1,26 @@
+
+namespace Invercargill.Generators {
+
+    public delegate Enumerable<T> DeferredDelegate<T>();
+
+    public class Deferred<T> : Enumerable<T> {
+
+        private DeferredDelegate<T> deferred_func;
+
+        public Deferred(owned DeferredDelegate<T> func) {
+            this.deferred_func = (owned)func;
+        }
+
+        public override Tracker<T> get_tracker () {
+            return deferred_func().get_tracker ();
+        }
+        public override int? peek_count () {
+            return null;
+        }
+        public override EnumerableInfo get_info () {
+            return new EnumerableInfo.infer_ultimate (this, EnumerableCategory.COMPUTED);
+        }
+
+    }
+
+}

+ 1 - 1
src/lib/Generators/Directory.vala

@@ -1,7 +1,7 @@
 
 namespace Invercargill.Generators {
 
-    internal class Directory : Enumerable<string> {
+    public class Directory : Enumerable<string> {
 
         private Dir dir;
 

+ 1 - 1
src/lib/Generators/Empty.vala

@@ -1,7 +1,7 @@
 
 namespace Invercargill.Generators {
 
-    internal class Empty<T> : Enumerable<T> {
+    public class Empty<T> : Enumerable<T> {
 
         public override int? peek_count() {
             return 0;

+ 1 - 1
src/lib/Generators/Range.vala

@@ -1,7 +1,7 @@
 
 namespace Invercargill.Generators {
 
-    internal class Range : Enumerable<int> {
+    public class Range : Enumerable<int> {
 
         private int start;
         private int stride;

+ 6 - 2
src/lib/Iterate.vala

@@ -19,8 +19,8 @@ namespace Invercargill.Iterate {
         return new Generators.Directory(Dir.open(path, flags));
     }
 
-    public static Enumerable<T> on<T>(Generators.GeneratorDelegate<T> function) {
-        return new Generators.Function<T>(function);
+    public static Enumerable<T> on<T>(owned Generators.GeneratorDelegate<T> function) {
+        return new Generators.Function<T>((owned)function);
     }
 
     public static Enumerable<T> these<T>(T item1, ...) {
@@ -37,5 +37,9 @@ namespace Invercargill.Iterate {
         return series.seal();
     }
 
+    public static Enumerable<T> deferred<T>(owned Generators.DeferredDelegate<T> function) {
+        return new Generators.Deferred<T>((owned)function);
+    }
+
 
 }

+ 1 - 0
src/lib/meson.build

@@ -63,6 +63,7 @@ sources += files('Generators/Range.vala')
 sources += files('Generators/Empty.vala')
 sources += files('Generators/Function.vala')
 sources += files('Generators/Directory.vala')
+sources += files('Generators/Deferred.vala')
 
 sources += files('Promotions/Numbers/Numbers.vala')
 sources += files('Promotions/Numbers/Implementations.vala')