57 lines
912 B
Text
57 lines
912 B
Text
import extensions;
|
|
import system'collections;
|
|
import system'routines;
|
|
import extensions'routines;
|
|
|
|
class HistoryVariable
|
|
{
|
|
Stack previous := new Stack();
|
|
object value;
|
|
|
|
prop Value
|
|
{
|
|
get() = value;
|
|
|
|
set(value)
|
|
{
|
|
if ((this value) != nil)
|
|
{
|
|
previous.push(this value)
|
|
};
|
|
|
|
this value := value
|
|
}
|
|
}
|
|
|
|
undo()
|
|
{
|
|
ifnot (previous.isEmpty())
|
|
{
|
|
value := previous.pop()
|
|
}
|
|
else
|
|
{
|
|
value := nil
|
|
}
|
|
}
|
|
|
|
enumerator() => previous;
|
|
|
|
get string Printable() => this value;
|
|
}
|
|
|
|
public program()
|
|
{
|
|
var o := new HistoryVariable();
|
|
o.Value := 5;
|
|
o.Value := "foo";
|
|
o.Value := o.Value + "bar";
|
|
|
|
console.printLine(o);
|
|
|
|
o.forEach:printingLn;
|
|
|
|
o.undo().undo().undo();
|
|
|
|
console.printLine(o.Value ?? "nil")
|
|
}
|