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