diff --git a/src/main/java/org/ultramine/core/util/UndoableOnce.java b/src/main/java/org/ultramine/core/util/UndoableOnce.java new file mode 100644 index 0000000..668433a --- /dev/null +++ b/src/main/java/org/ultramine/core/util/UndoableOnce.java @@ -0,0 +1,34 @@ +package org.ultramine.core.util; + +import jline.internal.Nullable; + +public final class UndoableOnce implements Undoable +{ + private static final UndoableOnce EMPTY = new UndoableOnce(null); + @Nullable private Undoable undoable; + + private UndoableOnce(@Nullable Undoable undoable) + { + this.undoable = undoable; + } + + public UndoableOnce of(Undoable undoable) + { + return new UndoableOnce(undoable); + } + + public UndoableOnce empty() + { + return EMPTY; + } + + @Override + public void undo() + { + if(undoable != null) + { + undoable.undo(); + undoable = null; + } + } +}