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); } } }