]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.runtime/scl/MList.scl
Remove http:.. prefix from logging in SCL
[simantics/platform.git] / bundles / org.simantics.scl.runtime / scl / MList.scl
1 import "Prelude" as Prelude
2 import "JavaBuiltin" as Java
3 import "Iterator" as Iterator
4
5 importJava "java.util.List" where
6     data T a
7     
8     contains :: T a -> a -> <Proc> Boolean
9     size :: T a -> <Proc> Integer
10     isEmpty :: T a -> <Proc> Boolean
11     get :: T a -> Integer -> <Proc> a
12     
13     add :: T a -> a -> <Proc> ()
14     addAll :: T a -> [a] -> <Proc> ()
15     remove :: T a -> Integer -> <Proc> a
16     clear :: T a -> <Proc> ()
17     
18     @private
19     iterator :: T a -> <Proc> Iterator.T a
20
21 removeLast :: T a -> <Proc> Maybe a
22 removeLast l = if isEmpty l
23                then Nothing
24                else Just (remove l (Java.isub (size l) 1))
25
26 @inline
27 iter :: (a -> <e> ()) -> T a -> <e,Proc> ()
28 iter f s = Iterator.iter f (iterator s)
29
30 @inline
31 iterB :: (a -> <e> Boolean) -> T a -> <e,Proc> Boolean
32 iterB f s = Iterator.iterB f (iterator s)
33
34 @inline
35 fold :: (a -> b  -> <e> a) -> a -> T b -> <Proc,e> a
36 fold f init s = Iterator.fold f init (iterator s)
37
38 importJava "java.util.ArrayList" where
39     @JavaName "<init>"
40     create :: () -> <Proc> T a
41     @JavaName "<init>"
42     createC :: Integer -> <Proc> T a
43
44 fromList :: [a] -> <Proc> T a
45 fromList l = do
46     result = createC (Prelude.length l)
47     Prelude.iter (\x -> Prelude.ignore (add result x)) l
48     result
49
50 singleton :: a -> <Proc> T a
51 singleton v = do
52     result = createC 2
53     add result v
54     result
55
56 @inline
57 freeze :: T a -> <Proc> [a]
58 freeze = Java.unsafeCoerce