3 #include <machine/machine.h>
4 #include <transition/amnesic/amnesicMachineTransition.h>
26 typename TransitionType,
29 template <
typename...>
class TransitionContainer = std::vector,
30 template <
typename...>
class InitialStateContainer = std::vector
46 typename TransitionType_,
48 template <
typename...>
class TransitionContainer_,
49 template <
typename...>
class InitialStateContainer_
51 class AmnesicMachine<TransitionType_, true, acceptingStyle, TransitionContainer_, InitialStateContainer_> :
52 public Machine<TransitionType_, true, acceptingStyle, TransitionContainer_, InitialStateContainer_> {
56 using typename Machine_::IsAccepting;
58 using typename Machine_::IsAlternating;
66 static_assert(std::is_same_v<StateType, typename TransitionType::StateType>);
67 static_assert(std::is_same_v<StorageType, typename TransitionType::StorageType>);
68 static_assert(std::is_same_v<TransitionType, TransitionType_>);
69 static_assert(std::is_same_v<ApplyHelperType, typename TransitionType::ApplyHelperType>);
70 static_assert(std::is_same_v<ApplyHelperType, std::monostate>);
71 static_assert(std::is_same_v<IsDeterministic, std::true_type>);
72 static_assert(std::is_same_v<
TransitionContainer, TransitionContainer_<std::pair<const TransitionType&, ApplyHelperType>>>);
74 static_assert(std::is_same_v<
OptionalHelpedTransition, std::optional<std::pair<const TransitionType&, ApplyHelperType>>>);
76 static_assert(std::is_same_v<StorageType, std::monostate>,
77 "StorageType should be a word.");
79 "TransitionType must be a derived class of AmnesicMachineTransition");
98 #pragma clang diagnostic push
99 #pragma clang diagnostic ignored "-Wunused-parameter"
114 return this->getMatchingTransitionFromState(state);
152 return this->isHaltingState(state);
154 #pragma clang diagnostic pop
190 typename TransitionType_,
192 template <
typename...>
class TransitionContainer_,
193 template <
typename...>
class InitialStateContainer_
195 class AmnesicMachine<TransitionType_, false, acceptingStyle, TransitionContainer_, InitialStateContainer_> :
196 public Machine<TransitionType_, false, acceptingStyle, TransitionContainer_, InitialStateContainer_> {
200 using typename Machine_::IsAccepting;
202 using typename Machine_::IsAlternating;
210 static_assert(std::is_same_v<StateType, typename TransitionType::StateType>);
211 static_assert(std::is_same_v<StorageType, typename TransitionType::StorageType>);
212 static_assert(std::is_same_v<TransitionType, TransitionType_>);
213 static_assert(std::is_same_v<ApplyHelperType, typename TransitionType::ApplyHelperType>);
214 static_assert(std::is_same_v<ApplyHelperType, std::monostate>);
215 static_assert(std::is_same_v<IsDeterministic, std::false_type>);
216 static_assert(std::is_same_v<
TransitionContainer, TransitionContainer_<std::pair<const TransitionType&, ApplyHelperType>>>);
218 static_assert(std::is_same_v<
OptionalHelpedTransition, std::optional<std::pair<const TransitionType&, ApplyHelperType>>>);
220 static_assert(std::is_same_v<StorageType, std::monostate>,
221 "StorageType should be a word.");
223 "TransitionType must be a derived class of AmnesicMachineTransition");
242 #pragma clang diagnostic push
243 #pragma clang diagnostic ignored "-Wunused-parameter"
258 return this->getMatchingTransitionsFromState(state);
291 return this->isHaltingState(state);
293 #pragma clang diagnostic pop