3 #include <machine/amnesic/simpleAmnesicMachine.h>
4 #include <transition/amnesic/simpleAmnesicMachineTransition.h>
19 typename AcceptingConstructorArgs =
typename impl_details_::StateAcceptingMachineArgs<StateType, acceptingStyle>::AcceptingConstructorArgs
39 using typename SimpleAmnesicMachine_::StateType;
40 using typename SimpleAmnesicMachine_::IsAccepting;
41 using typename SimpleAmnesicMachine_::StorageType;
42 using typename SimpleAmnesicMachine_::IsAlternating;
43 using typename SimpleAmnesicMachine_::TransitionType;
44 using typename SimpleAmnesicMachine_::ApplyHelperType;
45 using typename SimpleAmnesicMachine_::IsDeterministic;
46 using typename SimpleAmnesicMachine_::TransitionContainer;
47 using typename SimpleAmnesicMachine_::InitialStateContainer;
48 using typename SimpleAmnesicMachine_::OptionalHelpedTransition;
50 static_assert(std::is_same_v<StateType, typename TransitionType::StateType>);
51 static_assert(std::is_same_v<StorageType, typename TransitionType::StorageType>);
52 static_assert(std::is_same_v<TransitionType, TransitionType_>);
53 static_assert(std::is_same_v<ApplyHelperType, typename TransitionType::ApplyHelperType>);
54 static_assert(std::is_same_v<ApplyHelperType, std::monostate>);
55 static_assert(std::is_same_v<IsDeterministic, std::true_type>);
56 static_assert(std::is_same_v<TransitionContainer, std::vector<std::pair<const TransitionType &, ApplyHelperType>>>);
57 static_assert(std::is_same_v<InitialStateContainer, std::set<StateType>>);
58 static_assert(std::is_same_v<OptionalHelpedTransition, std::optional<std::pair<const TransitionType &, ApplyHelperType>>>);
60 static_assert(std::is_same_v<StorageType, std::monostate>,
61 "StorageType should be a word.");
62 static_assert(std::is_same_v<TransitionType_, TransitionType>,
63 "TransitionType must be SimpleAmnesicMachineTransition.");
65 "The only valid value for AcceptingConstructorArgs is the default parameter.");
70 #pragma clang diagnostic push
71 #pragma clang diagnostic ignored "-Wshadow-field"
85 const StateType &initialState,
86 const std::vector<TransitionType> &transitions,
87 const std::set<StateType> &finalStates,
91 initialState(initialState),
93 for (
const TransitionType &transition: transitions) {
94 this->transitions.insert({transition.getPreState(), transition});
97 #pragma clang diagnostic pop
141 virtual OptionalHelpedTransition
143 if (
typename std::map<StateType, TransitionType>::const_iterator it = transitions.find(state); it !=
145 return {{it->second, {}}};
151 StateType initialState;
152 std::map<StateType, TransitionType> transitions;