package jcircus.complementaryenvs;
import java.util.HashMap;
import java.util.LinkedHashMap;
public class ActStackVarEnv {
private HashMap <String, StackVarEnv> map;
public HashMap <String, StackVarEnv> getMap () {
return this.map;
}
public ActStackVarEnv () {
map = new LinkedHashMap <String, StackVarEnv> ();
}
public ActStackVarEnv (ActStackVarEnv asve) {
map = new LinkedHashMap <String, StackVarEnv> (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);
}
}