TuringSim
C++ framework to simulate abstract computing models
finiteStateMachineTransition.h
1 #pragma once
2 
3 #include <memory/word.h>
4 #include <transition/transition.h>
5 
17  template <
18  typename StateType_,
19  typename SymbolType_
20  >
22  public Transition<StateType_, Memory::Word::Word<SymbolType_>, std::monostate> {
25  public:
26  using typename Transition_::StateType;
27  using typename Transition_::StorageType;
28  using typename Transition_::ApplyHelperType;
29 
33  typedef SymbolType_ SymbolType;
34 
35  static_assert(std::is_same_v<StateType, StateType_>);
36  static_assert(std::is_same_v<StorageType, Memory::Word::Word<SymbolType_>>);
37  static_assert(std::is_same_v<ApplyHelperType, std::monostate>);
38 
41 
44 
47 
52 
57 
59  virtual ~FiniteStateMachineTransition() override = default;
60 
68  virtual std::optional<ApplyHelperType> match(const StateType& state, const StorageType& storage) const override final {
69  return this->matchFromCurrentLetter(state, storage.front_opt());
70  }
71 
79  virtual std::optional<ApplyHelperType> matchFromCurrentLetter(const StateType& state, const std::optional<SymbolType>& letter) const = 0;
80  };
81 }
TuringSim::Transition::Transition::ApplyHelperType
ApplyHelperType_ ApplyHelperType
The type of apply helpers.
Definition: transition.h:82
TuringSim::Memory::Word::Word
Class to represent a word memory, as used by a FSA.
Definition: word.h:21
TuringSim::Transition::FSM::FiniteStateMachineTransition::matchFromCurrentLetter
virtual std::optional< ApplyHelperType > matchFromCurrentLetter(const StateType &state, const std::optional< SymbolType > &letter) const =0
Test whether the transition matches a configuration. Returned optional is empty iff the transition do...
TuringSim::Transition::FSM::FiniteStateMachineTransition::SymbolType
SymbolType_ SymbolType
The type of symbols on the tape.
Definition: finiteStateMachineTransition.h:33
TuringSim::Transition::Transition::StateType
StateType_ StateType
The type of states.
Definition: transition.h:72
TuringSim::Transition::Transition
Base class for transitions.
Definition: transition.h:67
TuringSim::Transition::FSM::FiniteStateMachineTransition::match
virtual std::optional< ApplyHelperType > match(const StateType &state, const StorageType &storage) const override final
Test whether the transition matches a configuration. Returned optional is empty iff the transition do...
Definition: finiteStateMachineTransition.h:68
TuringSim::Transition::FSM::FiniteStateMachineTransition::FiniteStateMachineTransition
FiniteStateMachineTransition(FiniteStateMachineTransition &&)=default
The default move constructor.
TuringSim::Transition::FSM::FiniteStateMachineTransition::FiniteStateMachineTransition
FiniteStateMachineTransition(const FiniteStateMachineTransition &)=default
The default copy constructor.
TuringSim::Transition::FSM::FiniteStateMachineTransition::StateType
StateType_ StateType
The type of states.
Definition: transition.h:72
TuringSim::Transition::FSM
Transitions for finite-state machines.
TuringSim::Transition::FSM::FiniteStateMachineTransition::operator=
FiniteStateMachineTransition & operator=(const FiniteStateMachineTransition &)=default
The default copy assignment operator.
TuringSim::Transition::FSM::FiniteStateMachineTransition::~FiniteStateMachineTransition
virtual ~FiniteStateMachineTransition() override=default
The default virtual destructor.
TuringSim::Transition::FSM::FiniteStateMachineTransition
Transition of finite state machines, i.e. transition on a word.
Definition: finiteStateMachineTransition.h:22
TuringSim::Transition::FSM::FiniteStateMachineTransition::operator=
FiniteStateMachineTransition & operator=(FiniteStateMachineTransition &&)=default
The default move assignment operator.
TuringSim::Transition::FSM::FiniteStateMachineTransition::FiniteStateMachineTransition
FiniteStateMachineTransition()=default
The default constructor.
TuringSim::Transition::Transition::StorageType
StorageType_ StorageType
The type of storage.
Definition: transition.h:77