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
10
#include "
transitions/transition_any.h
"
11
#include "
transitions/transition_handlers.h
"
12
#include "
impl/__map.h
"
13
14
namespace
state_machine_cpp::Algorithm
{
15
class
Instance
;
16
namespace
Impl::Build {
17
class
States
;
18
class
Transitions
;
19
class
Layers
;
20
}
21
}
22
23
class
state_machine_cpp::Algorithm::Instance
{
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
32
friend
class
Algorithm::Impl::Build::States
;
33
void
create_state(
const
State::Instance
& t_instance);
34
void
remove_state(
const
State::Instance
& t_instance);
35
36
friend
class
Algorithm::Impl::Build::Transitions
;
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
58
const
state_machine_cpp::State::Id
&
state_machine_cpp::Algorithm::Instance::initial_state
()
const
{
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
65
const
state_machine_cpp::State::Id
&
state_machine_cpp::Algorithm::Instance::final_state
()
const
{
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
72
bool
state_machine_cpp::Algorithm::Instance::is_initial_state_set
()
const
{
73
return
m_initial_state;
74
}
75
76
bool
state_machine_cpp::Algorithm::Instance::is_final_state_set
()
const
{
77
return
m_final_state;
78
}
79
80
void
state_machine_cpp::Algorithm::Instance::set_initial_state
(
const
state_machine_cpp::State::Id
&t_initial_state) {
81
m_initial_state = &t_initial_state;
82
}
83
84
void
state_machine_cpp::Algorithm::Instance::set_final_state
(
const
state_machine_cpp::State::Id
&t_final_state) {
85
m_final_state = &t_final_state;
86
}
87
88
void
state_machine_cpp::Algorithm::Instance::set_time_limit_reached_state
(
89
const
state_machine_cpp::State::Id
&t_time_limit_reached) {
90
m_time_limit_state = &t_time_limit_reached;
91
}
92
93
const
state_machine_cpp::State::Id
&
state_machine_cpp::Algorithm::Instance::time_limit_reached_state
()
const
{
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
state_machine_cpp
include
algorithms
algorithm.h
Generated by
1.8.17