TuringSim
C++ framework to simulate abstract computing models
oneStepTuringMachineTransition.h
1 #pragma once
2 
3 #include <symbol/symbolPattern.h>
4 #include <transition/Turing/localTuringMachineTransition.h>
5 
15  template<
16  typename StateType_,
17  typename SymbolType_,
18  typename ApplyHelperType_,
19  bool hasHalfTape = false
20  >
21  class OneStepTuringMachineTransition : public LocalTuringMachineTransition<StateType_, SymbolType_, ApplyHelperType_, hasHalfTape> {
23  public:
30 
31  static_assert(std::is_same_v<SymbolType_, SymbolType>);
32  static_assert(std::is_same_v<Memory::TapeLike<hasHalfTape, SymbolType_>, StorageType>);
33  static_assert(std::is_same_v<StateType_, StateType>);
34  static_assert(std::is_same_v<StateType, StateType_>);
35 
38 
41 
44 
49 
54 
56  virtual ~OneStepTuringMachineTransition() override = default;
57 
70  virtual StateType apply(const StateType& state, Memory::TapeLike<hasHalfTape, SymbolType_>& tape, ApplyHelperType&& helper, bool& running) const override final {
71  auto&& [postState, postSymbol, movement] = this->getPostElements(state, tape.read(), std::move(helper));
72  tape.write(postSymbol);
73  tape.move(movement);
74  if(movement == Movement::HALT) {
75  running = false;
76  }
77  return postState;
78  }
79 
86  virtual std::tuple<StateType, SymbolType, Movement> getPostElements(const StateType& state, const SymbolType& symbol, ApplyHelperType&& helper) const = 0;
87  };
88 }
TuringSim::Transition::Turing::OneStepTuringMachineTransition::operator=
OneStepTuringMachineTransition & operator=(const OneStepTuringMachineTransition &)=default
The default copy assignment operator.
TuringSim::Transition::Turing::OneStepTuringMachineTransition::apply
virtual StateType apply(const StateType &state, Memory::TapeLike< hasHalfTape, SymbolType_ > &tape, ApplyHelperType &&helper, bool &running) const override final
Apply a previously matching transition and return the new state.
Definition: oneStepTuringMachineTransition.h:70
TuringSim::Transition::Transition< StateType_, Memory::TapeLike< hasHalfTape, SymbolType_ >, std::monostate >::ApplyHelperType
std::monostate ApplyHelperType
The type of apply helpers.
Definition: transition.h:82
TuringSim::Memory::TapeLike
std::conditional_t< isHalfTape, HalfTape::HalfTape< SymbolType >, Tape::Tape< SymbolType > > TapeLike
Definition: tapeLike.h:12
TuringSim::Transition::Turing
Transitions for Turing machines.
Definition: localTuringMachineTransition.h:6
TuringSim::Transition::Transition< StateType_, Memory::TapeLike< hasHalfTape, SymbolType_ >, std::monostate >::StateType
StateType_ StateType
The type of states.
Definition: transition.h:72
TuringSim::Transition::Turing::LocalTuringMachineTransition::Movement
StorageType_::Movement Movement
The type of movement on the tape.
Definition: turingMachineTransition.h:42
TuringSim::Transition::Turing::OneStepTuringMachineTransition::OneStepTuringMachineTransition
OneStepTuringMachineTransition(OneStepTuringMachineTransition &&)=default
The default move constructor.
TuringSim::Transition::Turing::TuringMachineTransition< StateType_, SymbolType_, ApplyHelperType_, false >::StateType
StateType_ StateType
The type of states.
Definition: transition.h:72
TuringSim::Transition::Turing::TuringMachineTransition< StateType_, SymbolType_, ApplyHelperType_, false >::ApplyHelperType
ApplyHelperType_ ApplyHelperType
The type of apply helpers.
Definition: transition.h:82
TuringSim::Transition::Turing::LocalTuringMachineTransition::HasHalfTape
std::integral_constant< bool, hasHalfTape > HasHalfTape
Whether the tape is a half-tape or a full tape.
Definition: turingMachineTransition.h:49
TuringSim::Transition::Turing::OneStepTuringMachineTransition
Turing machine transitions that reads only the current symbol, writes a symbol, performs a simple mov...
Definition: oneStepTuringMachineTransition.h:21
TuringSim::Transition::Turing::OneStepTuringMachineTransition::getPostElements
virtual std::tuple< StateType, SymbolType, Movement > getPostElements(const StateType &state, const SymbolType &symbol, ApplyHelperType &&helper) const =0
get the new state, the new symbol and the movement to execute.
TuringSim::Transition::Turing::OneStepTuringMachineTransition::OneStepTuringMachineTransition
OneStepTuringMachineTransition()=default
The default constructor.
TuringSim::Transition::Turing::OneStepTuringMachineTransition::OneStepTuringMachineTransition
OneStepTuringMachineTransition(const OneStepTuringMachineTransition &)=default
The default copy constructor.
TuringSim::Transition::Turing::OneStepTuringMachineTransition::operator=
OneStepTuringMachineTransition & operator=(OneStepTuringMachineTransition &&)=default
The default move assignment operator.
TuringSim::Transition::Turing::LocalTuringMachineTransition::SymbolType
SymbolType_ SymbolType
The type of symbols on the tape.
Definition: turingMachineTransition.h:37
TuringSim::Transition::Turing::OneStepTuringMachineTransition::~OneStepTuringMachineTransition
virtual ~OneStepTuringMachineTransition() override=default
The default virtual destructor.
TuringSim::Transition::Turing::TuringMachineTransition< StateType_, SymbolType_, ApplyHelperType_, false >::StorageType
StorageType_ StorageType
The type of storage.
Definition: transition.h:77
TuringSim::Transition::Turing::LocalTuringMachineTransition
Base class for Turing machine transitions that only reads the current symbol on the tape to decide if...
Definition: localTuringMachineTransition.h:23