]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/procedure/RandomEffect.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.scl.runtime / src / org / simantics / scl / runtime / procedure / RandomEffect.java
1 package org.simantics.scl.runtime.procedure;
2
3 import java.util.Random;
4
5 import org.simantics.scl.runtime.SCLContext;
6 import org.simantics.scl.runtime.function.Function;
7 import org.simantics.scl.runtime.tuple.Tuple0;
8
9 public class RandomEffect {
10     public static final String RANDOM = "random";
11     
12     public static Object withSeed(long seed, Function fun) {
13         SCLContext context = SCLContext.getCurrent();
14         Random oldRandom = (Random)context.put(RANDOM, new Random(seed));
15         try {
16             return fun.apply(Tuple0.INSTANCE);
17         } finally {
18             context.put(RANDOM, oldRandom);
19         }
20     }
21     
22     public static Object runRandom(Function fun) {
23         SCLContext context = SCLContext.getCurrent();
24         Random oldRandom = (Random)context.put(RANDOM, new Random());
25         try {
26             return fun.apply(Tuple0.INSTANCE);
27         } finally {
28             context.put(RANDOM, oldRandom);
29         }
30     }
31 }