3 #include <machine/FSM/stateAcceptingFiniteStateMachine.h>
4 #include <transition/FSM/simpleFiniteStateMachineTransition.h>
22 template <
typename...>
class TransitionContainer = std::vector,
23 template <
typename...>
class InitialStateContainer = std::vector,
24 typename AcceptingConstructorArgs =
typename impl_details_::StateAcceptingMachineArgs<StateType, acceptingStyle>::AcceptingConstructorArgs
49 template <
typename...>
class TransitionContainer_,
50 template <
typename...>
class InitialStateContainer_,
53 class SimpleFiniteStateMachine<StateType_, SymbolType_, deterministic, acceptingStyle, TransitionContainer_, InitialStateContainer_, std::tuple<Args...>>
54 :
public StateAcceptingFiniteStateMachine<Transition::FSM::SimpleFiniteStateMachineTransition<StateType_, SymbolType_>, deterministic, acceptingStyle, TransitionContainer_, InitialStateContainer_> {
58 using typename StateAcceptingFiniteStateMachine_::StateType;
59 using typename StateAcceptingFiniteStateMachine_::SymbolType;
60 using typename StateAcceptingFiniteStateMachine_::IsAccepting;
61 using typename StateAcceptingFiniteStateMachine_::StorageType;
62 using typename StateAcceptingFiniteStateMachine_::IsAlternating;
63 using typename StateAcceptingFiniteStateMachine_::TransitionType;
64 using typename StateAcceptingFiniteStateMachine_::ApplyHelperType;
65 using typename StateAcceptingFiniteStateMachine_::IsDeterministic;
66 using typename StateAcceptingFiniteStateMachine_::TransitionContainer;
67 using typename StateAcceptingFiniteStateMachine_::InitialStateContainer;
68 using typename StateAcceptingFiniteStateMachine_::OptionalHelpedTransition;
70 static_assert(std::is_same_v<StateType, typename TransitionType::StateType>);
71 static_assert(std::is_same_v<StorageType, typename TransitionType::StorageType>);
72 static_assert(std::is_same_v<TransitionType, TransitionType_>);
73 static_assert(std::is_same_v<ApplyHelperType, typename TransitionType::ApplyHelperType>);
74 static_assert(std::is_same_v<ApplyHelperType, std::monostate>);
75 static_assert(std::is_same_v<IsDeterministic, std::integral_constant<bool, deterministic>>);
76 static_assert(std::is_same_v<TransitionContainer, TransitionContainer_<std::pair<const TransitionType&, ApplyHelperType>>>);
77 static_assert(std::is_same_v<InitialStateContainer, InitialStateContainer_<StateType>>);
78 static_assert(std::is_same_v<OptionalHelpedTransition, std::optional<std::pair<const TransitionType&, ApplyHelperType>>>);
81 "StorageType should be a word.");
82 static_assert(std::is_same_v<TransitionType_, TransitionType>,
83 "TransitionType must be SimpleFiniteStateMachineTransition");
85 "The only valid value for AcceptingConstructorArgs is the default parameter.");
115 #pragma clang diagnostic push
116 #pragma clang diagnostic ignored "-Wunused-parameter"
138 return storage.isEndOfWord();
140 #pragma clang diagnostic pop