]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.runtime/scl/Map.scl
Added a new function pmap to Async module
[simantics/platform.git] / bundles / org.simantics.scl.runtime / scl / Map.scl
1 import "JavaBuiltin" as Java
2 import "Set" as Set
3 import "MMap" as MMap
4
5 importJava "java.util.Map" where
6     data T a b
7     
8     containsKey :: T a b -> a -> Boolean
9     containsValue :: T a b -> b -> Boolean
10     size :: T a b -> Integer
11     isEmpty :: T a b -> Boolean
12     entrySet :: T a b -> Set.T (MMap.Entry a b)
13     get :: T a b -> a -> Maybe b
14     @JavaName get
15     unsafeGet :: T a b -> a -> b
16     
17     keySet :: T a b -> Set.T a
18
19 @inline
20 iter :: (a -> b -> <e> ()) -> T a b -> <e> ()
21 iter f m = Set.iter (\entry -> f (MMap.keyOf entry) (MMap.valueOf entry)) (entrySet m)
22
23 @inline
24 iterB :: (a -> b -> <e> Boolean) -> T a b -> <e> Boolean
25 iterB f m = Set.iterB (\entry -> f (MMap.keyOf entry) (MMap.valueOf entry)) (entrySet m)
26
27 @inline
28 fold :: (a -> b -> c -> <e> a) -> a -> T b c -> <e> a
29 fold f init m = Set.fold (\cur entry -> f cur (MMap.keyOf entry) (MMap.valueOf entry)) init (entrySet m)
30
31 @inline
32 freeze :: MMap.T a b -> <Proc> T a b
33 freeze = Java.unsafeCoerce
34
35 /*
36 @inline
37 map :: (b -> <e> c) -> T a b -> <e> T a c
38 map f m = do
39     result = MMap.createC (size m)
40     iter (\k v -> put result k (f v)) m
41     freeze result
42 */