package oripa.doc;
import java.util.Deque;
import java.util.LinkedList;
public class UndoManager<Backup> {
private Deque<Backup> undoStack = new LinkedList<>();
private Backup cache;
private boolean changed = false;
private int max = 1000;
public UndoManager() {
}
public UndoManager(int max){
this.max = max;
}
public void push(Backup uinfo){
undoStack.push(uinfo);
if(undoStack.size() > max){
undoStack.removeFirst();
}
changed = true;
}
public Backup pop() {
if (undoStack.isEmpty()) {
return null;
}
else {
changed = true;
}
return undoStack.pop();
}
public Backup peek(){
if (undoStack.isEmpty()) {
return null;
}
return undoStack.peek();
}
public boolean isChanged(){
return changed;
}
public void clearChanged(){
changed = false;
}
public boolean canUndo(){
return ! undoStack.isEmpty();
}
public void setCache(Backup info){
cache = info;
}
public Backup getCache(){
return cache;
}
public void pushCachedInfo(){
this.push(cache);
}
}