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::false_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"
86 const std::set<StateType>& initialStates,
87 const std::vector<TransitionType>& transitions,
88 const std::set<StateType>& finalStates,
92 initialStates(initialStates),
94 for (
const TransitionType& transition: transitions) {
95 this->transitions[transition.getPreState()].insert(transition);
99 #pragma clang diagnostic pop
128 return initialStates;
144 if (
typename std::map<StateType, std::set<TransitionType>>::const_iterator it = transitions.find(state); it != transitions.end()) {
145 TransitionContainer matchingTransitionsWithHelpers;
146 for (
const TransitionType& matchingTransition: it->second) {
147 matchingTransitionsWithHelpers.push_back({matchingTransition, {}});
149 return matchingTransitionsWithHelpers;
155 std::set<StateType> initialStates;
156 std::map<StateType, std::set<TransitionType>> transitions;