ActStackVarEnv.java 1.84 KB
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
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);
}
}