5 #include <machine/Turing/turingMachine.h>
6 #include <transition/Turing/localTuringMachineTransition.h>
24 typename TransitionType_,
27 template <
typename...>
class TransitionContainer_ = std::vector,
28 template <
typename...>
class InitialStateContainer_ = std::vector>
45 typename TransitionType_,
47 template <
typename...>
class TransitionContainer_,
48 template <
typename...>
class InitialStateContainer_>
54 InitialStateContainer_> :
60 InitialStateContainer_> {
63 using typename TuringMachine_::StateType;
66 using typename TuringMachine_::IsAccepting;
67 using typename TuringMachine_::StorageType;
68 using typename TuringMachine_::IsAlternating;
69 using typename TuringMachine_::TransitionType;
70 using typename TuringMachine_::ApplyHelperType;
71 using typename TuringMachine_::IsDeterministic;
72 using typename TuringMachine_::TransitionContainer;
73 using typename TuringMachine_::InitialStateContainer;
74 using typename TuringMachine_::OptionalHelpedTransition;
76 static_assert(std::is_same_v<StateType, typename TransitionType::StateType>);
77 static_assert(std::is_same_v<SymbolType, typename StorageType::SymbolType>);
78 static_assert(std::is_same_v<HasHalfTape, typename TransitionType::HasHalfTape>);
79 static_assert(std::is_same_v<StorageType, typename TransitionType::StorageType>);
80 static_assert(std::is_same_v<TransitionType, TransitionType_>);
81 static_assert(std::is_same_v<ApplyHelperType, typename TransitionType::ApplyHelperType>);
82 static_assert(std::is_same_v<IsDeterministic, std::false_type>);
83 static_assert(std::is_same_v<TransitionContainer, TransitionContainer_<std::pair<const TransitionType&, ApplyHelperType>>>);
84 static_assert(std::is_same_v<InitialStateContainer, InitialStateContainer_<StateType>>);
85 static_assert(std::is_same_v<OptionalHelpedTransition, std::optional<std::pair<const TransitionType&, ApplyHelperType>>>);
88 "TransitionType must be a derived class of LocalTuringMachineTransition");
129 virtual TransitionContainer
getMatchingTransitions(
const StateType& state,
const StorageType& tape)
const noexcept
override final {
130 return this->getMatchingTransitionsFromCurrentCell(state, tape.read());
148 typename TransitionType_,
150 template <
typename...>
class TransitionContainer_,
151 template <
typename...>
class InitialStateContainer_>
156 TransitionContainer_,
157 InitialStateContainer_> :
162 TransitionContainer_,
163 InitialStateContainer_> {
166 using typename TuringMachine_::StateType;
169 using typename TuringMachine_::IsAccepting;
170 using typename TuringMachine_::StorageType;
171 using typename TuringMachine_::IsAlternating;
172 using typename TuringMachine_::TransitionType;
173 using typename TuringMachine_::ApplyHelperType;
174 using typename TuringMachine_::IsDeterministic;
175 using typename TuringMachine_::TransitionContainer;
176 using typename TuringMachine_::InitialStateContainer;
177 using typename TuringMachine_::OptionalHelpedTransition;
179 static_assert(std::is_same_v<StateType, typename TransitionType::StateType>);
180 static_assert(std::is_same_v<HasHalfTape, typename TransitionType::HasHalfTape>);
181 static_assert(std::is_same_v<SymbolType, typename StorageType::SymbolType>);
182 static_assert(std::is_same_v<StorageType, typename TransitionType::StorageType>);
183 static_assert(std::is_same_v<TransitionType, TransitionType_>);
184 static_assert(std::is_same_v<ApplyHelperType, typename TransitionType::ApplyHelperType>);
185 static_assert(std::is_same_v<IsDeterministic, std::true_type>);
186 static_assert(std::is_same_v<TransitionContainer, TransitionContainer_<std::pair<const TransitionType&, ApplyHelperType>>>);
187 static_assert(std::is_same_v<InitialStateContainer, InitialStateContainer_<StateType>>);
188 static_assert(std::is_same_v<OptionalHelpedTransition, std::optional<std::pair<const TransitionType&, ApplyHelperType>>>);
191 "TransitionType must be a derived class of LocalTuringMachineTransition");
235 virtual OptionalHelpedTransition
getMatchingTransition(
const StateType& state,
const StorageType& tape)
const noexcept
override final {
236 return this->getMatchingTransitionFromCurrentCell(state, tape.read());