package tarau.jinni; import java.util.Stack; /** * Varable-like entity, with a multiple values, in stack order. * Set operations are undone on backtraking, when the previous * value is restored. */ class MultiVar extends Fluent { Stack vals; MultiVar(Term T,Prog p) { super(p); vals=new Stack(); vals.push(T.ref()); } final void set(Term T,Prog p) { vals.push(T); p.getTrail().push(this); } public Term val() { return (Term)vals.peek(); } /** * cannot be made presistent */ protected void undo() { vals.pop(); } public String toString() { return "MultiVar["+vals.size()+"]->{"+vals.peek().toString()+"}"; } }