namespace Chronos
{
///
/// An occurrence action that is executed when time goes forward. Returns any object that will be transfered to the backward action if time is rewinded.
///
public delegate T ForwardFunc();
///
/// An occurrence action that is executed when time goes backward. Uses the object returned by the forward action to remember state information.
///
public delegate void BackwardFunc(T transfer);
internal sealed class FuncOccurence : Occurrence
{
private ForwardFunc forward { get; set; }
private BackwardFunc backward { get; set; }
private T transfer { get; set; }
public FuncOccurence(ForwardFunc forward, BackwardFunc backward)
{
this.forward = forward;
this.backward = backward;
}
public override void Forward()
{
transfer = forward();
}
public override void Backward()
{
backward(transfer);
}
}
}