state_machine_cpp
algorithm.h
Go to the documentation of this file.
1 //
2 // Created by henri on 22/04/21.
3 //
4 
5 #ifndef STATE_MACHINE_CPP_ALGORITHM_H
6 #define STATE_MACHINE_CPP_ALGORITHM_H
7 
8 #include <stack>
9 
12 #include "impl/__map.h"
13 
15  class Instance;
16  namespace Impl::Build {
17  class States;
18  class Transitions;
19  class Layers;
20  }
21  }
22 
24 
25  TransitionSet m_transitions;
26  const State::Id* m_initial_state = nullptr;
27  const State::Id* m_final_state = nullptr;
28  const State::Id* m_time_limit_state = nullptr;
29 
30  [[nodiscard]] bool has(const State::Instance& t_instance) const;
31 
33  void create_state(const State::Instance& t_instance);
34  void remove_state(const State::Instance& t_instance);
35 
37  void create_any_transition(const State::Instance& t_initial_instance,
38  Transition::Type t_transition_type,
39  std::vector<State::Instance> &&t_next_states,
40  std::function<int(Context&)>&& t_handler,
41  bool t_is_override,
42  std::string&& t_description);
43  void remove_transition(const State::Instance& t_instance);
44  void set_as_final(const State::Instance& t_instance);
45 public:
46  [[nodiscard]] const TransitionSet& transitions() const;
47 
48  [[nodiscard]] inline const State::Id& initial_state() const;
49  [[nodiscard]] inline const State::Id& final_state() const;
50  [[nodiscard]] inline const State::Id& time_limit_reached_state() const;
51  [[nodiscard]] inline bool is_initial_state_set() const;
52  [[nodiscard]] inline bool is_final_state_set() const;
53  inline void set_initial_state(const State::Id& t_initial_state);
54  inline void set_final_state(const State::Id& t_final_state);
55  inline void set_time_limit_reached_state(const State::Id& t_time_limit_reached);
56 };
57 
59  if (!m_initial_state) {
60  throw std::runtime_error("No initial state configure. Use set_initial_state.");
61  }
62  return *m_initial_state;
63 }
64 
66  if (!m_final_state) {
67  throw std::runtime_error("No initial state configure. Use set_initial_state.");
68  }
69  return *m_final_state;
70 }
71 
73  return m_initial_state;
74 }
75 
77  return m_final_state;
78 }
79 
81  m_initial_state = &t_initial_state;
82 }
83 
85  m_final_state = &t_final_state;
86 }
87 
89  const state_machine_cpp::State::Id &t_time_limit_reached) {
90  m_time_limit_state = &t_time_limit_reached;
91 }
92 
94  return m_time_limit_state ? *m_time_limit_state : *m_final_state;
95 }
96 
97 
98 #endif //STATE_MACHINE_CPP_ALGORITHM_H
state_machine_cpp::Algorithm::Impl::Build::States
Definition: builder_impl_states.h:17
transition_any.h
state_machine_cpp::TransitionSet
Definition: __map.h:34
state_machine_cpp::State::Id
Definition: state_id.h:23
state_machine_cpp::Algorithm::Instance::final_state
const State::Id & final_state() const
Definition: algorithm.h:65
state_machine_cpp::Algorithm::Instance::set_final_state
void set_final_state(const State::Id &t_final_state)
Definition: algorithm.h:84
state_machine_cpp::Transition::Type
Type
Definition: transition_handlers.h:19
state_machine_cpp::Algorithm::Instance
Definition: algorithm.h:23
state_machine_cpp::Algorithm::Instance::set_initial_state
void set_initial_state(const State::Id &t_initial_state)
Definition: algorithm.h:80
state_machine_cpp::State::Instance
Definition: state_instance.h:23
state_machine_cpp::Algorithm::Instance::initial_state
const State::Id & initial_state() const
Definition: algorithm.h:58
state_machine_cpp::Algorithm::Impl::Build::Transitions
Definition: builder_impl_transitions.h:21
state_machine_cpp::Algorithm::Impl::Build::Layers
Definition: builder_impl_layers.h:15
state_machine_cpp::Algorithm::Instance::is_final_state_set
bool is_final_state_set() const
Definition: algorithm.h:76
state_machine_cpp::Algorithm
Definition: algorithm.h:14
transition_handlers.h
state_machine_cpp::Algorithm::Instance::is_initial_state_set
bool is_initial_state_set() const
Definition: algorithm.h:72
__map.h
state_machine_cpp::Algorithm::Instance::transitions
const TransitionSet & transitions() const
state_machine_cpp::Algorithm::Instance::time_limit_reached_state
const State::Id & time_limit_reached_state() const
Definition: algorithm.h:93
state_machine_cpp::Context
Definition: context.h:25
state_machine_cpp::Algorithm::Instance::set_time_limit_reached_state
void set_time_limit_reached_state(const State::Id &t_time_limit_reached)
Definition: algorithm.h:88