package framework.model3D;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Hashtable;
public class UndoBuffer {
@SuppressWarnings("unchecked")
private ArrayList<Hashtable<Class, Property3D>> list = new ArrayList<Hashtable<Class,Property3D>>();
@SuppressWarnings("unchecked")
private Hashtable<Class, Property3D> nowCondition = new Hashtable<Class, Property3D>();
private static final int max = 3;
UndoBuffer() {
}
UndoBuffer(UndoBuffer another) {
this.list = (ArrayList<Hashtable<Class, Property3D>>)another.list.clone();
this.nowCondition = (Hashtable<Class, Property3D>)another.nowCondition.clone();
}
public void push(Property3D p) {
nowCondition.put(p.getClass(), p.clone());
}
@SuppressWarnings("unchecked")
public void setUndoMark() {
if(list.size() == max) {
list.remove(max - 1);
}
list.add(0, (Hashtable<Class, Property3D>) nowCondition.clone());
}
@SuppressWarnings("unchecked")
public Collection<Property3D> undo() {
if(list.size() != 0) {
nowCondition = list.remove(0);
return nowCondition.values();
}
else {
return new Hashtable<Class, Property3D>().values();
}
}
public void clear() {
}
}