package org.squirrelframework.foundation.fsm;
/**
* A linked state specifies the insertion of the specification of a submachine state machine.
* The state machine that contains the linked state is called the containing state machine.
* The same state machine may be a submachine more than once in the context of a single containing
* state machine.
*
* A linked state is semantically equivalent to a composite state. The regions of the submachine
* state machine are the regions of the composite state. The entry, exit, and behavior actions and
* internal transitions are defined as part of the state. Submachine state is a decomposition
* mechanism that allows factoring of common behaviors and their reuse.
*
* @author Henry.He
*
* @param <T> type of State Machine
* @param <S> type of State
* @param <E> type of Event
* @param <C> type of Context
*/
public interface ImmutableLinkedState<T extends StateMachine<T, S, E, C>, S, E, C> extends ImmutableState<T, S, E, C> {
/**
* @return linked state machine
*/
StateMachine<? extends StateMachine<?, S, E, C>, S, E, C> getLinkedStateMachine(T stateMachine);
}