]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.runtime/scl/Iterator.scl
Implemented many type class instances for Set.T
[simantics/platform.git] / bundles / org.simantics.scl.runtime / scl / Iterator.scl
index be7fb90e06e7f7517486275bdfc7614b79a3551c..b98e14f423aaccb9252883be3d95c569833ce8bf 100644 (file)
@@ -1,3 +1,5 @@
+import "JavaBuiltin" as Java
+
 importJava "java.util.Iterator" where
     data T a
     
@@ -16,6 +18,17 @@ iter f it = loop ()
             loop ()
         else ()
 
+@inline
+iterI :: (Integer -> a -> <e> b) -> T a -> <Proc,e> ()
+iterI f it = loop 0
+  where
+    loop i = 
+        if hasNext it
+        then do
+            f i (next it)
+            loop (Java.iadd i 1)
+        else ()
+        
 @inline
 iterB :: (a -> <e> Boolean) -> T a -> <Proc,e> Boolean
 iterB f it = loop ()
@@ -27,6 +40,19 @@ iterB f it = loop ()
              else False
         else True
 
+@inline
+filter :: (a -> <e> Boolean) -> T a -> <Proc,e> ()
+filter f it = loop ()
+  where
+    loop _ = 
+        if hasNext it
+        then do
+            if f (next it)
+            then ()
+            else remove it
+            loop ()
+        else ()
+
 @inline
 mapFirst :: (a -> <e> Maybe b) -> T a -> <Proc,e> Maybe b
 mapFirst f it = loop ()