package org.rascalmpl.library.experiments.Compiler.RVM.Interpreter; import java.util.HashMap; import java.util.Map; import org.rascalmpl.value.IMap; import org.rascalmpl.value.IString; import org.rascalmpl.value.IValue; import org.rascalmpl.value.IValueFactory; /** * Builder-like class to create IMap with keyword parameters * * Typical usage: * new KWParams(vf).add("key1", vf.integer(1)).add("key2", vf.string("abc")).build(); */ public class KWArgs { protected Map<String, IValue> kwArgs; protected IValueFactory vf; /** * Create a keyword parameter builder * @param vf ValueFactory to be used */ public KWArgs(IValueFactory vf){ this.vf = vf; kwArgs = new HashMap<>(); } /** * Add a (key, value) pair to the keyword parameters * @param key Name of keyword parameter * @param val Value of keyword parameter * @return This KWParams, with the pair (key, val) added */ public KWArgs add(String key, IValue val){ kwArgs.put(key, val); return this; } public KWArgs add(String key, boolean b){ kwArgs.put(key, vf.bool(b)); return this; } public KWArgs add(String key, int n){ kwArgs.put(key, vf.integer(n)); return this; } public KWArgs add(String key, float f){ kwArgs.put(key, vf.real(f)); return this; } public KWArgs add(String key, double d){ kwArgs.put(key, vf.real(d)); return this; } public KWArgs add(String key, String s){ kwArgs.put(key, vf.string(s)); return this; } public KWArgs add(IMap kwmap){ for(IValue key : kwmap){ if(!key.getType().isString()){ throw new RuntimeException("Key in keywerd parameter map should be a string"); } kwArgs.put(((IString) key).getValue(), kwmap.get(key)); } return this; } /** * @return this KWParams as Map */ public Map<String, IValue> build(){ return kwArgs; } }