Pārlūkot izejas kodu

Remove as_iterable (will break stuff) and implement vala iterator protocol

Billy Barrow 2 gadi atpakaļ
vecāks
revīzija
e0081620fd

+ 2 - 2
src/lib/Enumerable.vala

@@ -36,8 +36,8 @@ namespace Invercargill {
             return collection;
         }
 
-        public virtual Gee.Iterable<T> as_iterable() {
-            return new GeeIterable<T>(this);
+        public virtual Tracker<T> iterator() {
+            return get_tracker();
         }
 
         public virtual T[] to_array() {

+ 0 - 74
src/lib/GeeIterable.vala

@@ -1,74 +0,0 @@
-
-using Gee;
-
-namespace Invercargill {
-
-    private class GeeIterable<T> : Object, Traversable<T>, Iterable<T> {
-
-        private Enumerable<T> enumerable;
-
-        public GeeIterable(Enumerable<T> e) {
-            enumerable = e;
-        }
-
-        public bool foreach (Gee.ForallFunc<T> f) {
-            return enumerable.iterate_if(i => f(i));
-        } 
-
-        public Gee.Iterator<T> iterator () {
-            return new GeeIterator<T>(enumerable.get_tracker());
-        }
-       
-    }
-
-    private class GeeIterator<T> : Object, Traversable<T>, Iterator<T> {
-
-        private Tracker<T> tracker;
-        private T current_value;
-        private bool has_current_value = false;
-
-
-        public GeeIterator(Tracker<T> tracker) {
-            this.tracker = tracker;
-        }
-
-        public new T get () {
-            return current_value;
-        }
-
-        public bool has_next () {
-            return tracker.has_next ();
-        }
-
-        public bool next () {
-            if(tracker.has_next ()) {
-                current_value = tracker.get_next ();
-                return true;
-            }
-            return false;
-        }
-
-        public void remove () {
-            assert_not_reached ();
-        }
-
-        public bool read_only { get {
-            return true;
-        }}
-
-        public bool valid { get {
-            return has_current_value;
-        }}
-
-        public bool foreach (Gee.ForallFunc<T> handler) {
-            while(tracker.has_next()) {
-                if(!handler(tracker.get_next())) {
-                    return false;
-                }
-            }
-            return true;
-        }
-
-    }
-
-}

+ 14 - 0
src/lib/Tracker.vala

@@ -5,6 +5,20 @@ namespace Invercargill {
         public abstract bool has_next();
         public abstract T get_next();
 
+        private T current_value;
+
+        public bool next() {
+            if(has_next()) {
+                current_value = get_next ();
+                return true;
+            }
+            return false;
+        }
+
+        public T get() {
+            return current_value;
+        }
+
     }
 
     public class AdvanceTracker<T> : Tracker<T> {

+ 0 - 1
src/lib/meson.build

@@ -8,7 +8,6 @@ dependencies = [
 
 sources = files('Invercargill.vala')
 sources += files('Enumerable.vala')
-sources += files('GeeIterable.vala')
 sources += files('Delegates.vala')
 sources += files('Pair.vala')
 sources += files('Tracker.vala')

+ 0 - 33
src/tests/Integration/Gee.vala

@@ -13,37 +13,4 @@ void gee_tests() {
         }
     });
 
-    Test.add_func("/invercargill/conversion/gee/iterable", () => {
-        var items = ate(new int[] { 1, 2, 3, 4, 5, 6});
-        var result = items.as_iterable();
-
-        var i = 1;
-        foreach (var item in result) {
-            assert_true(item == i);
-            i++;
-        }
-    });
-
-    Test.add_func("/invercargill/conversion/gee/iterable2", () => {
-        var items = range(10, 1000, 5);
-        var result = items.as_iterable();
-
-        var i = 10;
-        foreach (var item in result) {
-            assert_true(item == i);
-            i += 5;
-        }
-    });
-
-    Test.add_func("/invercargill/conversion/gee/iterable3", () => {
-        var items = range(0, 1000);
-        var result = items.as_iterable();
-
-        var i = 0;
-        foreach (var item in result) {
-            assert_true(item == i);
-            i++;
-        }
-    });
-
 }

+ 35 - 0
src/tests/Integration/Tracker.vala

@@ -0,0 +1,35 @@
+using Invercargill;
+
+void tracker_tests() {
+
+    Test.add_func("/invercargill/enumerable/iterator", () => {
+        var items = ate(new int[] { 1, 2, 3, 4, 5, 6});
+
+        var i = 1;
+        foreach (var item in items) {
+            assert_true(item == i);
+            i++;
+        }
+    });
+
+    Test.add_func("/invercargill/enumerable/iterator2", () => {
+        var items = range(10, 1000, 5);
+
+        var i = 10;
+        foreach (var item in items) {
+            assert_true(item == i);
+            i += 5;
+        }
+    });
+
+    Test.add_func("/invercargill/enumerable/iterator3", () => {
+        var items = range(0, 1000);
+
+        var i = 0;
+        foreach (var item in items) {
+            assert_true(item == i);
+            i++;
+        }
+    });
+
+}

+ 1 - 0
src/tests/TestRunner.vala

@@ -7,6 +7,7 @@ public static int main(string[] args) {
     select_tests();
     select_many_tests();
     gee_tests();
+    tracker_tests();
 
     Test.run();
 

+ 1 - 0
src/tests/meson.build

@@ -7,5 +7,6 @@ sources += files('Integration/Skip.vala')
 sources += files('Integration/Take.vala')
 sources += files('Integration/Sort.vala')
 sources += files('Integration/Gee.vala')
+sources += files('Integration/Tracker.vala')
 
 executable('invercargill-test-suite', sources, dependencies: dependencies, install: true)