TuringSim
C++ framework to simulate abstract computing models
simpleAmnesicMachine.h
1 #pragma once
2 
3 #include <machine/amnesic/stateAcceptingAmnesicMachine.h>
4 #include <transition/amnesic/simpleAmnesicMachineTransition.h>
5 
15  template<
16  typename StateType,
17  bool deterministic,
18  AcceptingStyle acceptingStyle,
19  template<typename...> class TransitionContainer = std::vector,
20  template<typename...> class InitialStateContainer = std::set
21  >
24  deterministic,
25  acceptingStyle,
26  TransitionContainer,
27  InitialStateContainer>;
28 
38  template<
39  typename StateType,
40  bool deterministic,
41  AcceptingStyle acceptingStyle,
42  template<typename...> class TransitionContainer = std::vector,
43  template<typename...> class InitialStateContainer = std::set,
45  >
47 
56  template<
57  typename StateType_,
58  bool deterministic,
59  AcceptingStyle acceptingStyle,
60  template<typename...> class TransitionContainer_,
61  template<typename...> class InitialStateContainer_,
62  typename... Args
63  >
64  class SimpleAmnesicMachine<StateType_, deterministic, acceptingStyle, TransitionContainer_, InitialStateContainer_, std::tuple<Args...>>
65  : public StateAcceptingSimpleAmnesicMachine<StateType_, deterministic, acceptingStyle, TransitionContainer_, InitialStateContainer_> {
68  public:
69  using typename SimpleAmnesicMachine_accept_impl_::StateType;
70  using typename SimpleAmnesicMachine_accept_impl_::IsAccepting;
71  using typename SimpleAmnesicMachine_accept_impl_::StorageType;
72  using typename SimpleAmnesicMachine_accept_impl_::IsAlternating;
73  using typename SimpleAmnesicMachine_accept_impl_::TransitionType;
74  using typename SimpleAmnesicMachine_accept_impl_::ApplyHelperType;
75  using typename SimpleAmnesicMachine_accept_impl_::IsDeterministic;
76  using typename SimpleAmnesicMachine_accept_impl_::TransitionContainer;
77  using typename SimpleAmnesicMachine_accept_impl_::InitialStateContainer;
78  using typename SimpleAmnesicMachine_accept_impl_::OptionalHelpedTransition;
79 
80  static_assert(std::is_same_v<StateType, typename TransitionType::StateType>);
81  static_assert(std::is_same_v<StorageType, typename TransitionType::StorageType>);
82  static_assert(std::is_same_v<TransitionType, TransitionType_>);
83  static_assert(std::is_same_v<ApplyHelperType, typename TransitionType::ApplyHelperType>);
84  static_assert(std::is_same_v<ApplyHelperType, std::monostate>);
85  static_assert(std::is_same_v<IsDeterministic, std::integral_constant<bool, deterministic>>);
86  static_assert(std::is_same_v<TransitionContainer, TransitionContainer_<std::pair<const TransitionType& , ApplyHelperType>>>);
87  static_assert(std::is_same_v<InitialStateContainer, InitialStateContainer_<StateType>>);
88  static_assert(std::is_same_v<OptionalHelpedTransition, std::optional<std::pair<const TransitionType& , ApplyHelperType>>>);
89 
90  static_assert(std::is_same_v<StorageType, std::monostate>,
91  "StorageType should be a word.");
92  static_assert(std::is_same_v<TransitionType_, TransitionType>,
93  "TransitionType must be SimpleAmnesicMachineTransition.");
94  static_assert(std::is_same_v<std::tuple<Args...>, typename impl_details_::StateAcceptingMachineArgs<StateType, acceptingStyle>::AcceptingConstructorArgs>,
95  "The only valid value for AcceptingConstructorArgs is the default parameter.");
96 
99 
110  SimpleAmnesicMachine(const std::set<StateType>& finalStates, Args... args) :
112  finalStates(finalStates) {}
113 
116 
119 
124 
129 
131  virtual ~SimpleAmnesicMachine() override = default;
132 
152  virtual bool isHaltingState(const StateType& state) const noexcept override final {
153  return finalStates.count(state) > 0;
154  }
155 
156  protected:
159  std::set<StateType> finalStates;
160  };
161 }
TuringSim::Machine::Amnesic::SimpleAmnesicMachine< StateType_, deterministic, acceptingStyle, TransitionContainer_, InitialStateContainer_, std::tuple< Args... > >::~SimpleAmnesicMachine
virtual ~SimpleAmnesicMachine() override=default
The default virtual destructor.
TuringSim::Machine::impl_details_::StateAcceptingMachineArgs
This class provide a single type AcceptingConstructorArgs that is the tuple of parameters used to dec...
Definition: stateAcceptingMachine.h:38
TuringSim::Machine::Amnesic::SimpleAmnesicMachine< StateType_, deterministic, acceptingStyle, TransitionContainer_, InitialStateContainer_, std::tuple< Args... > >::operator=
SimpleAmnesicMachine & operator=(SimpleAmnesicMachine &&)=default
The default move assignment operator.
TuringSim::Machine::Amnesic::SimpleAmnesicMachine< StateType_, deterministic, acceptingStyle, TransitionContainer_, InitialStateContainer_, std::tuple< Args... > >::isHaltingState
virtual bool isHaltingState(const StateType &state) const noexcept override final
Test if a given state is a halting one.
Definition: simpleAmnesicMachine.h:152
TuringSim::Machine::Amnesic::SimpleAmnesicMachine
The base class of amnesic machine with simple state and explicit list of transitions.
Definition: simpleAmnesicMachine.h:46
TuringSim::Machine::Amnesic::SimpleAmnesicMachine< StateType_, deterministic, acceptingStyle, TransitionContainer_, InitialStateContainer_, std::tuple< Args... > >::SimpleAmnesicMachine
SimpleAmnesicMachine(SimpleAmnesicMachine &&)=default
The default move constructor.
TuringSim::Machine::Amnesic::SimpleAmnesicMachine< StateType_, deterministic, acceptingStyle, TransitionContainer_, InitialStateContainer_, std::tuple< Args... > >::SimpleAmnesicMachine
SimpleAmnesicMachine(const SimpleAmnesicMachine &)=default
The default copy constructor.
TuringSim::Machine::Amnesic::SimpleAmnesicMachine< StateType_, deterministic, acceptingStyle, TransitionContainer_, InitialStateContainer_, std::tuple< Args... > >::finalStates
std::set< StateType > finalStates
The set of states that halts the machine.
Definition: simpleAmnesicMachine.h:159
TuringSim::Machine::Amnesic::SimpleAmnesicMachine< StateType_, deterministic, acceptingStyle, TransitionContainer_, InitialStateContainer_, std::tuple< Args... > >::SimpleAmnesicMachine
SimpleAmnesicMachine(const std::set< StateType > &finalStates, Args... args)
Builds a SimpleAmnesicMachine given a set of accepting states.
Definition: simpleAmnesicMachine.h:110
TuringSim::Machine::AcceptingStyle
AcceptingStyle
Whether the machine is accepting, alternating or nothing.
Definition: acceptingMachine.h:11
TuringSim::Transition::Amnesic::SimpleAmnesicMachineTransition
A simple transition of an amnesic machine: from an explicit state to an explicit state.
Definition: simpleAmnesicMachineTransition.h:13
TuringSim::Machine::Amnesic::SimpleAmnesicMachine< StateType_, deterministic, acceptingStyle, TransitionContainer_, InitialStateContainer_, std::tuple< Args... > >::operator=
SimpleAmnesicMachine & operator=(const SimpleAmnesicMachine &)=default
The default copy assignment operator.
TuringSim::Machine::Amnesic
Namespace of amnesic machine, that is machines without memory.
TuringSim::Machine::StateAcceptingMachine
Definition: stateAcceptingMachine.h:93
TuringSim::Machine::Amnesic::SimpleAmnesicMachine< StateType_, deterministic, acceptingStyle, TransitionContainer_, InitialStateContainer_, std::tuple< Args... > >::SimpleAmnesicMachine
SimpleAmnesicMachine()=delete
The deleted default constructor.