package gui.render;
import java.util.HashMap;
import java.util.Map;
import java.util.Observable;
import java.util.Observer;
import ast.expr.Identifier;
import ast.value.Value;
public class State {
private final Map<Identifier, Value> env;
private Map<Identifier, Observable> observables;
public State() {
this.env = new HashMap<Identifier, Value>();
this.observables = new HashMap<Identifier, Observable>();
}
public State(Map<Identifier, Value> env, Map<Identifier, Observable> observables) {
this.env = env;
this.observables = observables;
}
public void addAllObservers(Observer obs){
for (Identifier ident: observables.keySet()){
observables.get(ident).addObserver(obs);
}
}
public void putObserver(Identifier id, Observable obs){
observables.put(id, obs);
}
public void addValue(Identifier id, Value val){
this.env.put(id, val);
notify(id);
}
public Map<Identifier, Value> getEnvValues() {
return env;
}
public Map<Identifier, Observable> getobservables() {
return observables;
}
public void notify(Identifier ident){
Observable obs = observables.get(ident);
if (obs != null){
obs.notifyObservers();
}
}
public void notifyall(){
observables.notifyAll();
}
public State currentState(){
return new State(env, observables);
}
}