public static StateMachineGraph GetGraph <TInstance>(this StateMachine <TInstance> machine) where TInstance : class { var inspector = new GraphStateMachineVisitor <TInstance>(); machine.Accept(inspector); return(inspector.Graph); }
/// <summary> /// Initialise a state machine model. /// </summary> /// <typeparam name="TInstance">The type of the state machine instance.</typeparam> /// <param name="model">The state machine model to initialise.</param> /// <remarks>Initialising a state machine model precompiles all the transition behavior for performance. The root state machine maintains a clean/dirty flag to track if reinitialisation is required.</remarks> public static void Initialise <TInstance>(this StateMachine <TInstance> model) where TInstance : IInstance <TInstance> { // log as required Console.WriteLine("initialise " + model); // initialise the state machine model model.Accept(new InitialiseElements <TInstance>(), false); model.Clean = true; }
public override void VisitStateMachine(StateMachine <TInstance> stateMachine, bool deepHistoryAbove) { base.VisitStateMachine(stateMachine, deepHistoryAbove); // initiaise all the transitions once all the elements have been initialised stateMachine.Accept(new InitialiseTransitions <TInstance>(), this.Behaviour); // define the behaviour for initialising a state machine instance stateMachine.OnInitialise = this.Behaviour(stateMachine).Enter; }
public static IEnumerable <Token> Tokenize(IEnumerable <char> text) { var stateMachine = new StateMachine(); foreach (var symbol in text) { foreach (Token token in stateMachine.Accept(symbol)) { yield return(token); } } foreach (Token token in stateMachine.AcceptEndOfStream()) { yield return(token); } }
/// <summary> /// Validates a state machine model for correctness. /// </summary> /// <typeparam name="TInstance">The type of the state machine instance.</typeparam> /// <param name="model">The state machine model.</param> /// <remarks>The validation criteria are largely drawn from the UML 2 Superstructure Specification.</remarks> public static void Validate <TInstance>(this StateMachine <TInstance> model) where TInstance : IInstance <TInstance> { model.Accept(new Validator <TInstance>()); }