]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/commands/ValueToStringConverter.java
(refs #7250) Merging master, minor CHR bugfixes
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / commands / ValueToStringConverter.java
1 package org.simantics.scl.compiler.commands;
2
3 import org.simantics.scl.compiler.runtime.RuntimeEnvironment;
4 import org.simantics.scl.compiler.top.ExpressionEvaluator;
5 import org.simantics.scl.compiler.top.SCLExpressionCompilationException;
6 import org.simantics.scl.compiler.types.Type;
7 import org.simantics.scl.compiler.types.Types;
8 import org.simantics.scl.runtime.function.Function1;
9
10 import gnu.trove.map.hash.THashMap;
11
12 public class ValueToStringConverter {
13     final RuntimeEnvironment environment;
14     final THashMap<Type, Function1> showInstances = new THashMap<Type, Function1>(); 
15
16     public ValueToStringConverter(RuntimeEnvironment environment) {
17         this.environment = environment;
18     }
19
20     public String show(Object value, Type type) throws SCLExpressionCompilationException {
21         Function1 showInstance = showInstances.get(type);
22         if(showInstance == null) {
23             showInstance = (Function1)new ExpressionEvaluator(environment, "show")
24             .expectedType(Types.function(type, Types.STRING))
25             .eval();
26             showInstances.put(type, showInstance); 
27         }
28         return (String)showInstance.apply(value);
29     }
30 }