state_machine_cpp
example_DoubleLoop_main.cpp
Go to the documentation of this file.
1
//
2
// Created by henri on 10/05/21.
3
//
4
5
#define STATE_MACHINE_CPP_EXAMPLE_FORLOOP_H
6
#include "../1_ForLoop/example_ForLoop_main.cpp"
7
8
class
DoubleLoop
final :
public
Algorithm::Builder
{
9
public
:
10
11
static
const
State::Id
&
INITIAL_STATE
;
12
static
const
State::Id
&
FINAL_STATE
;
13
14
static
void
show_double_counter
(
Context
& context) {
15
const
auto
& i = context.
get_relative
<
ForLoop::Attributes
>(-1);
16
const
auto
& j = context.
get
<
ForLoop::Attributes
>();
17
std::cout << i.
iteration
<<
", "
<< j.
iteration
<< std::endl;
18
}
19
20
void
build
(
States
&states,
Transitions
&transitions,
Layers
&layers)
override
{
21
import<ForLoop>(states, transitions, layers);
22
23
auto
A = layers.
create
();
24
import<ForLoop>(states, transitions, layers);
25
transitions.
override
(
ForLoop::BEGIN_OF_ITERATION
,
ForLoop::END_OF_ITERATION
,
show_double_counter
);
26
layers.
close
();
27
28
transitions.
override
(
ForLoop::BEGIN_OF_ITERATION
,
INITIAL_STATE
[A]);
29
transitions.
override
(
FINAL_STATE
[A],
ForLoop::END_OF_ITERATION
);
30
}
31
32
static
AttributeTree<Layer<ForLoop::Attributes>
,
Layer<ForLoop::Attributes>
>*
33
create_attributes
(
int
n,
int
m) {
34
return
new
AttributeTree<Layer<ForLoop::Attributes>
,
Layer<ForLoop::Attributes>
>(
35
new
Layer
(
new
ForLoop::Attributes
(n)),
36
new
Layer
(
new
ForLoop::Attributes
(m))
37
);
38
}
39
};
40
41
const
State::Id
&
DoubleLoop::INITIAL_STATE
=
ForLoop::INITIAL_STATE
;
42
const
State::Id
&
DoubleLoop::FINAL_STATE
=
ForLoop::FINAL_STATE
;
43
44
int
main
(
int
argc,
const
char
** argv) {
45
46
Algorithm::Instance
algorithm;
47
Algorithm::build<DoubleLoop>(algorithm);
48
Algorithm::sanity_check
(algorithm);
49
Algorithm::plot
(algorithm,
"my_algorithm_merged"
);
50
51
auto
context = Context::create<DoubleLoop>(3, 5);
52
53
Algorithm::run
(algorithm, context);
54
55
return
0;
56
}
state_machine_cpp::State::Id
Definition:
state_id.h:23
ForLoop::BEGIN_OF_ITERATION
static const State::Id BEGIN_OF_ITERATION
Definition:
example_ForLoop_main.cpp:25
main
int main(int argc, const char **argv)
Definition:
example_DoubleLoop_main.cpp:44
state_machine_cpp::Algorithm::plot
void plot(const Algorithm::Instance &t_algorithm, const std::string &t_filename, bool t_run_command=true)
ForLoop::END_OF_ITERATION
static const State::Id END_OF_ITERATION
Definition:
example_ForLoop_main.cpp:26
state_machine_cpp::Algorithm::run
void run(const Algorithm::Instance &t_instance, Context &t_context)
state_machine_cpp::Algorithm::Builder::Layers
Definition:
builder_layers.h:10
DoubleLoop::build
void build(States &states, Transitions &transitions, Layers &layers) override
Definition:
example_DoubleLoop_main.cpp:20
ForLoop::INITIAL_STATE
static const State::Id INITIAL_STATE
Definition:
example_ForLoop_main.cpp:23
DoubleLoop::create_attributes
static AttributeTree< Layer< ForLoop::Attributes >, Layer< ForLoop::Attributes > > * create_attributes(int n, int m)
Definition:
example_DoubleLoop_main.cpp:33
state_machine_cpp::Algorithm::Instance
Definition:
algorithm.h:23
ForLoop::Attributes
Definition:
example_ForLoop_main.cpp:13
DoubleLoop::FINAL_STATE
static const State::Id & FINAL_STATE
Definition:
example_DoubleLoop_main.cpp:12
state_machine_cpp::Algorithm::Builder::Transitions::override
void override(const State::Any &t_initial_state, const State::Any &t_next_state, Transition::TrivialHandler &t_handler, std::string t_description="")
DoubleLoop::INITIAL_STATE
static const State::Id & INITIAL_STATE
Definition:
example_DoubleLoop_main.cpp:11
state_machine_cpp::Algorithm::Builder::States
Definition:
builder_states.h:10
ForLoop::Attributes::iteration
int iteration
Definition:
example_ForLoop_main.cpp:14
state_machine_cpp::Algorithm::sanity_check
bool sanity_check(const Algorithm::Instance &t_algorithm)
ForLoop::FINAL_STATE
static const State::Id FINAL_STATE
Definition:
example_ForLoop_main.cpp:27
state_machine_cpp::AttributeTree
Definition:
attribute_tree.h:15
state_machine_cpp::Context::get_relative
T & get_relative(int t_offset)
Definition:
context.h:66
DoubleLoop::show_double_counter
static void show_double_counter(Context &context)
Definition:
example_DoubleLoop_main.cpp:14
state_machine_cpp::Algorithm::Builder
Definition:
builder.h:18
state_machine_cpp::Algorithm::Builder::Layers::close
virtual void close()=0
state_machine_cpp::Context::get
T & get(int t_layer=-1)
Definition:
context.h:48
state_machine_cpp::Layer
Definition:
layer.h:12
state_machine_cpp::Algorithm::Builder::Layers::create
virtual unsigned int create()=0
state_machine_cpp::Algorithm::Builder::Transitions
Definition:
builder_transitions.h:11
state_machine_cpp::Context
Definition:
context.h:25
DoubleLoop
Definition:
example_DoubleLoop_main.cpp:8
examples
3_DoubleLoop
example_DoubleLoop_main.cpp
Generated by
1.8.17