package ptolemy.actor.ptalon.model;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Set;
import ptolemy.data.Token;
import ptolemy.data.expr.Parameter;
import ptolemy.data.expr.ParserScope;
import ptolemy.data.type.Type;
import ptolemy.data.type.TypeConstant;
import ptolemy.graph.InequalityTerm;
import ptolemy.kernel.util.IllegalActionException;
public class PtalonModelScope implements ParserScope {
public PtalonModelScope(Hashtable<String, Parameter> parameters) {
_parameters = parameters;
}
private Hashtable<String, Parameter> _parameters;
public String uniqueName(String prefix) {
if (!_parameters.containsKey(prefix) && !_variables.containsKey(prefix))
return prefix;
int numberOfOccurances = 0;
String result = prefix + (numberOfOccurances++);
while (_parameters.containsKey(result) || _variables.containsKey(result))
result = prefix + (numberOfOccurances++);
return result;
}
public void addVariable(String name, Token value) {
_variables.put(name, value);
}
public void removeName(String name) {
_variables.remove(name);
}
private Hashtable<String, Token> _variables = new Hashtable<String, Token>();
public Token get(String name) throws IllegalActionException {
if (_parameters.containsKey(name))
return _parameters.get(name).getToken();
else if (_variables.containsKey(name))
return _variables.get(name);
throw new IllegalActionException("Key not found");
}
public Type getType(String name) throws IllegalActionException {
if (_parameters.containsKey(name))
return _parameters.get(name).getType();
else if (_variables.containsKey(name))
return _variables.get(name).getType();
throw new IllegalActionException("Key not found");
}
public InequalityTerm getTypeTerm(String name)
throws IllegalActionException {
if (_parameters.containsKey(name))
return _parameters.get(name).getTypeTerm();
else if (_variables.containsKey(name))
return new TypeConstant(_variables.get(name).getType());
return null;
}
public Set identifierSet() throws IllegalActionException {
HashSet<String> keys = new HashSet<String>();
for (String key : _parameters.keySet())
keys.add(key);
for (String key : _variables.keySet())
keys.add(key);
return keys;
}
}