3 #include <memory/tapeLike.h>
4 #include <machine/machine.h>
5 #include <transition/Turing/turingMachineTransition.h>
28 typename TransitionType_,
31 template <
typename...>
class TransitionContainer_ = std::vector,
32 template <
typename...>
class InitialStateContainer_ = std::vector>
33 class TuringMachine :
public Machine<TransitionType_, deterministic, acceptingStyle, TransitionContainer_, InitialStateContainer_>
37 using typename Machine_::StateType;
38 using typename Machine_::IsAccepting;
39 using typename Machine_::StorageType;
40 using typename Machine_::IsAlternating;
41 using typename Machine_::TransitionType;
42 using typename Machine_::ApplyHelperType;
43 using typename Machine_::IsDeterministic;
44 using typename Machine_::TransitionContainer;
45 using typename Machine_::InitialStateContainer;
46 using typename Machine_::OptionalHelpedTransition;
61 static_assert(std::is_same_v<StateType, typename TransitionType::StateType>);
62 static_assert(std::is_same_v<StorageType, typename TransitionType::StorageType>);
63 static_assert(std::is_same_v<TransitionType, TransitionType_>);
64 static_assert(std::is_same_v<ApplyHelperType, typename TransitionType::ApplyHelperType>);
65 static_assert(std::is_same_v<IsDeterministic, std::integral_constant<bool, deterministic>>);
66 static_assert(std::is_same_v<TransitionContainer, TransitionContainer_<std::pair<const TransitionType&, ApplyHelperType>>>);
67 static_assert(std::is_same_v<InitialStateContainer, InitialStateContainer_<StateType>>);
68 static_assert(std::is_same_v<OptionalHelpedTransition, std::optional<std::pair<const TransitionType&, ApplyHelperType>>>);
71 "StorageType should be TapeLike.");
73 "TransitionType must be a derived class of TuringMachineTransition");
107 #pragma clang diagnostic push
108 #pragma clang diagnostic ignored "-Wunused-parameter"
126 #pragma clang diagnostic pop