/// <summary> /// Emits directed actions conditioned by indexing strings. /// </summary> /// <param name="actions">Actions to emit.</param> internal void Emit_ActionSwitch(Dictionary<string, AutomatonBuilderDirector> actions, AutomatonBuilderDirector defaultConditionAction = null) { AutomatonState currentState; AutomatonState targetState; prepareNewState(out currentState, out targetState); AutomatonState defaultConditionState = null; if (defaultConditionAction != null) { defaultConditionState = _context.CreateNewState(); defaultConditionState.SetAction(defaultConditionAction, targetState); } setConditionedActions(currentState, targetState, actions, defaultConditionState); }
/// <summary> /// Emits action conditioned by given byte in current target state. /// </summary> /// <param name="condition">The condition byte.</param> /// <param name="action">The action.</param> internal void Emit_TargetAction(byte condition, AutomatonBuilderDirector action) { _lastTargetState.SetByteAction(condition, action); }
/// <summary> /// Sets action for given byte input. /// </summary> /// <param name="b">Condition byte.</param> /// <param name="action">The action.</param> internal void SetByteAction(byte b, AutomatonBuilderDirector action) { if (_director != null) throw new NotImplementedException("cannot set byte target when state action is present"); _byteActions.Add(b, action); }
/// <summary> /// Emits directed actions conditioned by indexing strings repeating until empty line. /// </summary> /// <param name="actions">Actions to emit.</param> internal void Emit_RepeatedActionSwitch(Dictionary<string, AutomatonBuilderDirector> actions, AutomatonBuilderDirector defaultConditionAction = null) { //set repeating of target state _repeatedTargetState = _lastTargetState; AutomatonState currentState; AutomatonState targetState; prepareNewState(out currentState, out targetState); AutomatonState defaultConditionState = null; if (defaultConditionAction != null) { defaultConditionState = _context.CreateNewState(); defaultConditionState.SetAction(defaultConditionAction, targetState); } //setting current state as output state will cause repeating of the state. setConditionedActions(currentState, currentState, actions, defaultConditionState); }
/// <summary> /// Sets action for current state, ending at target state. /// </summary> /// <param name="stateActionDirector">Director for building the action.</param> /// <param name="targetState">Target which will be active after the action is processed.</param> internal void SetAction(AutomatonBuilderDirector stateActionDirector, AutomatonState targetState) { if (_byteTargets.Count > 0 || _byteActions.Count > 0) throw new NotSupportedException("Cannot set state action when byte target is available"); if (stateActionDirector == null) throw new ArgumentNullException("stateActionDirector"); _director = stateActionDirector; _targetState = targetState; }