]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.runtime/scl/Map.scl
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.runtime / scl / Map.scl
diff --git a/bundles/org.simantics.scl.runtime/scl/Map.scl b/bundles/org.simantics.scl.runtime/scl/Map.scl
new file mode 100644 (file)
index 0000000..ee90e8a
--- /dev/null
@@ -0,0 +1,42 @@
+import "JavaBuiltin" as Java
+import "Set" as Set
+import "MMap" as MMap
+
+importJava "java.util.Map" where
+    data T a b
+    
+    containsKey :: T a b -> a -> Boolean
+    containsValue :: T a b -> b -> Boolean
+    size :: T a b -> Integer
+    isEmpty :: T a b -> Boolean
+    entrySet :: T a b -> Set.T (MMap.Entry a b)
+    get :: T a b -> a -> Maybe b
+    @JavaName get
+    unsafeGet :: T a b -> a -> b
+    
+    keySet :: T a b -> Set.T a
+
+@inline
+iter :: (a -> b -> <e> ()) -> T a b -> <e> ()
+iter f m = Set.iter (\entry -> f (MMap.keyOf entry) (MMap.valueOf entry)) (entrySet m)
+
+@inline
+iterB :: (a -> b -> <e> Boolean) -> T a b -> <e> Boolean
+iterB f m = Set.iterB (\entry -> f (MMap.keyOf entry) (MMap.valueOf entry)) (entrySet m)
+
+@inline
+fold :: (a -> b -> c -> <e> a) -> a -> T b c -> <e> a
+fold f init m = Set.fold (\cur entry -> f cur (MMap.keyOf entry) (MMap.valueOf entry)) init (entrySet m)
+
+@inline
+freeze :: MMap.T a b -> <Proc> T a b
+freeze = Java.unsafeCoerce
+
+/*
+@inline
+map :: (b -> <e> c) -> T a b -> <e> T a c
+map f m = do
+    result = MMap.createC (size m)
+    iter (\k v -> put result k (f v)) m
+    freeze result
+*/
\ No newline at end of file