Class StateMachine<E,​C,​IN>


  • public abstract class StateMachine<E,​C,​IN>
    extends Object
    A Finite State Machine implementation. This state machine is callback based, which differs from the standard FSM from textbook. Easier to use and faster to develop and debug.
    Since:
    6.0.0
    Author:
    simonpai
    • Field Detail

      • _current

        protected E _current
      • _run

        protected boolean _run
      • _step

        protected int _step
      • _debug

        protected boolean _debug
    • Constructor Detail

      • StateMachine

        public StateMachine()
        Construct a state machine
    • Method Detail

      • setDebugMode

        public StateMachine<E,​C,​IN> setDebugMode​(boolean mode)
        Set debug mode, where onDebug(String) is called at certain timing to assist user develop the state machine
      • setState

        public StateCtx<E,​C,​IN> setState​(E token,
                                                     StateCtx<E,​C,​IN> state)
        Set the state by token
        Returns:
        the state
      • removeState

        public StateCtx<E,​C,​IN> removeState​(E token)
        Remove the state by token.
        Returns:
        the removed state
      • getState

        public StateCtx<E,​C,​IN> getState​(E token)
        Get the state by token. Automatically creates one if it does not exist.
      • getState

        public StateCtx<E,​C,​IN> getState​(E token,
                                                     boolean autoCreate)
        Get the state by token.
        Parameters:
        autoCreate - if true, automatically creates one if it does not exist.
      • init

        protected void init()
        Called at the constructor of state machine
      • getLandingState

        protected abstract E getLandingState​(IN input,
                                             C inputClass)
        Determines the initial state upon meeting the input character and class
      • getClass

        protected abstract C getClass​(IN input)
        Determines the class for an input character.
      • onReset

        protected void onReset()
        This method is called at constructor and when reseting the machine.
      • onStart

        protected void onStart​(IN input,
                               C inputClass,
                               E landing)
        This method is called when the machine takes the first character.
      • beforeStep

        protected void beforeStep​(IN input,
                                  C inputClass,
                                  E origin)
        This method is called before executing a step
      • afterStep

        protected void afterStep​(IN input,
                                 C inputClass,
                                 E origin,
                                 E destination)
        This method is called after executing a step
      • onStop

        protected void onStop​(boolean endOfInput)
        This method is called when the machine stops
        Parameters:
        endOfInput - true if the machine stops due to end of input
      • onReject

        protected void onReject​(IN input)
        This method is called when the machine rejects an input character
      • onDebug

        protected void onDebug​(String message)
        This method is call at certain situations when debug mode is on.
        See Also:
        setDebugMode(boolean)
      • run

        public final void run​(Iterator<IN> inputs)
        Feed the machine a stream of characters
      • run

        public final void run​(IN input)
        Feed the machine a single character
      • start

        public final void start​(Iterator<IN> inputs)
        Starts the machine with a stream of input characters.
      • start

        public final void start​(IN input)
        Starts the machine with a single input character.
      • terminate

        public final void terminate()
        Terminates the machine.
      • getCurrentState

        public E getCurrentState()
        Return the current state
      • isTerminated

        public boolean isTerminated()
        Return true if the machine is stopped
      • isSuspended

        public boolean isSuspended()
        Return true if the machine is suspended
      • suspend

        protected final void suspend()
        Suspend the machine
      • doReject

        protected final void doReject​(IN input)
        Reject a character