TuringSim
C++ framework to simulate abstract computing models
simpleAmnesicMachineTransition.h
1 #pragma once
2 
3 #include <transition/amnesic/amnesicMachineTransition.h>
4 
6 
11  template<typename StateType_>
13  : public AmnesicMachineTransition<StateType_> {
15  public:
19 
20  static_assert(std::is_same_v<StateType, StateType_>);
21  static_assert(std::is_same_v<StorageType, std::monostate>);
22  static_assert(std::is_same_v<ApplyHelperType, std::monostate>);
23 
29  SimpleAmnesicMachineTransition(const StateType& preState, const StateType& postState) :
30  preState(preState), postState(postState)
31  {}
37  SimpleAmnesicMachineTransition(const StateType& preState, const StateType& postState, bool terminating) :
38  preState(preState), postState(postState), terminating(terminating)
39  {}
40 
43 
46 
51 
56 
58  virtual ~SimpleAmnesicMachineTransition() override = default;
59 
66  virtual std::optional<ApplyHelperType> matchFromState(const StateType& state) const override final {
67  if(state == preState) {
68  return {std::monostate{}};
69  }
70  return {};
71  }
72 
73  virtual StateType applyFromState(const StateType&, bool& running) const override final {
74  running = !terminating;
75  return postState;
76  }
77 
81  const StateType& getPreState() const noexcept {
82  return preState;
83  }
84 
88  const StateType& getPostState() const noexcept {
89  return postState;
90  }
91 
95  bool isTerminating() const noexcept {
96  return terminating;
97  }
98 
103  bool operator<(const SimpleAmnesicMachineTransition& other) const {
104  if(preState < other.preState) {
105  return true;
106  }
107  if(preState > other.preState) {
108  return false;
109  }
110  if(postState < other.postState) {
111  return true;
112  }
113  if(postState > other.postState) {
114  return false;
115  }
116  if(terminating == other.terminating) {
117  return false;
118  }
119  return other.terminating;
120  }
121 
122  private:
123  StateType preState;
124  StateType postState;
125  bool terminating = false;
126  };
127 }
TuringSim::Transition::Amnesic::AmnesicMachineTransition
The transition base class for AmnesicMachine.
Definition: amnesicMachineTransition.h:16
TuringSim::Transition::Transition< StateType_, std::monostate, std::monostate >::ApplyHelperType
std::monostate ApplyHelperType
The type of apply helpers.
Definition: transition.h:82
TuringSim::Transition::Amnesic::SimpleAmnesicMachineTransition::operator=
SimpleAmnesicMachineTransition & operator=(SimpleAmnesicMachineTransition &&)=default
The default move assignment operator.
TuringSim::Transition::Amnesic::SimpleAmnesicMachineTransition::matchFromState
virtual std::optional< ApplyHelperType > matchFromState(const StateType &state) const override final
Test whether the transition matches a configuration. Returned optional is empty iff the transition do...
Definition: simpleAmnesicMachineTransition.h:66
TuringSim::Transition::Amnesic
Transitions for amnesic machines.
TuringSim::Transition::Amnesic::SimpleAmnesicMachineTransition::SimpleAmnesicMachineTransition
SimpleAmnesicMachineTransition(const StateType &preState, const StateType &postState, bool terminating)
Build a non-halting transition from a pre-state and a post-state.
Definition: simpleAmnesicMachineTransition.h:37
TuringSim::Transition::Transition< StateType_, std::monostate, std::monostate >::StateType
StateType_ StateType
The type of states.
Definition: transition.h:72
TuringSim::Transition::Amnesic::SimpleAmnesicMachineTransition::operator<
bool operator<(const SimpleAmnesicMachineTransition &other) const
Less than operator. Strong order.
Definition: simpleAmnesicMachineTransition.h:103
TuringSim::Transition::Amnesic::SimpleAmnesicMachineTransition::isTerminating
bool isTerminating() const noexcept
Whether the transition should halts the machine.
Definition: simpleAmnesicMachineTransition.h:95
TuringSim::Transition::Amnesic::SimpleAmnesicMachineTransition::applyFromState
virtual StateType applyFromState(const StateType &, bool &running) const override final
Apply a previously matching transition and return the new state, without irrelevant parameters.
Definition: simpleAmnesicMachineTransition.h:73
TuringSim::Transition::Amnesic::SimpleAmnesicMachineTransition::SimpleAmnesicMachineTransition
SimpleAmnesicMachineTransition(const StateType &preState, const StateType &postState)
Build a non-halting transition from a pre-state and a post-state.
Definition: simpleAmnesicMachineTransition.h:29
TuringSim::Transition::Amnesic::SimpleAmnesicMachineTransition::operator=
SimpleAmnesicMachineTransition & operator=(const SimpleAmnesicMachineTransition &)=default
The default copy assignment operator.
TuringSim::Transition::Amnesic::SimpleAmnesicMachineTransition::SimpleAmnesicMachineTransition
SimpleAmnesicMachineTransition(SimpleAmnesicMachineTransition &&)=default
The default move constructor.
TuringSim::Transition::Amnesic::SimpleAmnesicMachineTransition
A simple transition of an amnesic machine: from an explicit state to an explicit state.
Definition: simpleAmnesicMachineTransition.h:13
TuringSim::Transition::Amnesic::SimpleAmnesicMachineTransition::SimpleAmnesicMachineTransition
SimpleAmnesicMachineTransition(const SimpleAmnesicMachineTransition &)=default
The default copy constructor.
TuringSim::Transition::Amnesic::SimpleAmnesicMachineTransition::~SimpleAmnesicMachineTransition
virtual ~SimpleAmnesicMachineTransition() override=default
The default virtual destructor.
TuringSim::Transition::Amnesic::SimpleAmnesicMachineTransition::getPreState
const StateType & getPreState() const noexcept
Get the pre-state.
Definition: simpleAmnesicMachineTransition.h:81
TuringSim::Transition::Amnesic::SimpleAmnesicMachineTransition::getPostState
const StateType & getPostState() const noexcept
Get the post-state.
Definition: simpleAmnesicMachineTransition.h:88
TuringSim::Transition::Transition< StateType_, std::monostate, std::monostate >::StorageType
std::monostate StorageType
The type of storage.
Definition: transition.h:77