--- /dev/null
+package org.simantics.scl.runtime.procedure;\r
+\r
+import java.util.Random;\r
+\r
+import org.simantics.scl.runtime.SCLContext;\r
+import org.simantics.scl.runtime.function.Function;\r
+import org.simantics.scl.runtime.tuple.Tuple0;\r
+\r
+public class RandomEffect {\r
+ public static final String RANDOM = "random";\r
+ \r
+ public static Object withSeed(long seed, Function fun) {\r
+ SCLContext context = SCLContext.getCurrent();\r
+ Random oldRandom = (Random)context.put(RANDOM, new Random(seed));\r
+ try {\r
+ return fun.apply(Tuple0.INSTANCE);\r
+ } finally {\r
+ context.put(RANDOM, oldRandom);\r
+ }\r
+ }\r
+ \r
+ public static Object runRandom(Function fun) {\r
+ SCLContext context = SCLContext.getCurrent();\r
+ Random oldRandom = (Random)context.put(RANDOM, new Random());\r
+ try {\r
+ return fun.apply(Tuple0.INSTANCE);\r
+ } finally {\r
+ context.put(RANDOM, oldRandom);\r
+ }\r
+ }\r
+}\r