X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.runtime%2Fscl%2FIterator.scl;h=b98e14f423aaccb9252883be3d95c569833ce8bf;hp=be7fb90e06e7f7517486275bdfc7614b79a3551c;hb=e1b1c30f512d3c196c86c4a1f0eaf8b7dd461a9a;hpb=969bd23cab98a79ca9101af33334000879fb60c5 diff --git a/bundles/org.simantics.scl.runtime/scl/Iterator.scl b/bundles/org.simantics.scl.runtime/scl/Iterator.scl index be7fb90e0..b98e14f42 100644 --- a/bundles/org.simantics.scl.runtime/scl/Iterator.scl +++ b/bundles/org.simantics.scl.runtime/scl/Iterator.scl @@ -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 -> b) -> T a -> () +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 -> Boolean) -> T a -> Boolean iterB f it = loop () @@ -27,6 +40,19 @@ iterB f it = loop () else False else True +@inline +filter :: (a -> Boolean) -> T a -> () +filter f it = loop () + where + loop _ = + if hasNext it + then do + if f (next it) + then () + else remove it + loop () + else () + @inline mapFirst :: (a -> Maybe b) -> T a -> Maybe b mapFirst f it = loop ()