package jcircus.complementaryenvs; import java.util.HashMap; import java.util.LinkedHashMap; public class ActStackVarEnv { private HashMap map; public HashMap getMap () { return this.map; } public ActStackVarEnv () { map = new LinkedHashMap (); } public ActStackVarEnv (ActStackVarEnv asve) { map = new LinkedHashMap (asve.getMap()); } private boolean containsKeySubstring (String substring) { Object [] o = this.map.keySet().toArray(); boolean aux = false; for (int i = 0; i < o.length; i++) { if (((String)o [i]).contains(substring)) { aux = true; } } return aux; } private String getKeyFromSubstring (String substring) { Object [] o = this.map.keySet().toArray(); String aux = ""; for (int i = 0; i < o.length; i++) { if (((String)o [i]).contains(substring)) { aux = (String) o[i]; } } return aux; } public void update (String act, StackVarEnv sve) { if (!this.map.containsKey(act)) { if (act.contains("$$") && containsKeySubstring (act)) { String key = getKeyFromSubstring (act); this.map.put(key, sve); } this.map.put(act, sve); } else { this.map.remove(act); this.map.put(act, sve); } } public StackVarEnv get (String act) { if (this.map.containsKey(act)) return this.map.get(act); /*else if (this.containsKeySubstring ("$$mainAction")) { return this.map.get(this.getKeyFromSubstring("$$mainAction")); }*/ return new StackVarEnv (); } public void push (String act, String var) { StackVarEnv sve = new StackVarEnv (this.get(act)); sve.push(var); this.update(act, sve); } public void pop (String act, String var) { StackVarEnv sve = new StackVarEnv (this.get(act)); sve.pop(var); this.update(act, sve); } }