state_machine_cpp
example_DoubleLoop_main.cpp

This example shows how to do multiple inheritance

//
// Created by henri on 10/05/21.
//
#define STATE_MACHINE_CPP_EXAMPLE_FORLOOP_H
#include "../1_ForLoop/example_ForLoop_main.cpp"
class DoubleLoop final : public Algorithm::Builder {
public:
static const State::Id& INITIAL_STATE;
static const State::Id& FINAL_STATE;
static void show_double_counter(Context& context) {
const auto& i = context.get_relative<ForLoop::Attributes>(-1);
const auto& j = context.get<ForLoop::Attributes>();
std::cout << i.iteration << ", " << j.iteration << std::endl;
}
void build(States &states, Transitions &transitions, Layers &layers) override {
import<ForLoop>(states, transitions, layers);
auto A = layers.create();
import<ForLoop>(states, transitions, layers);
layers.close();
transitions.override(ForLoop::BEGIN_OF_ITERATION, INITIAL_STATE[A]);
transitions.override(FINAL_STATE[A], ForLoop::END_OF_ITERATION);
}
static AttributeTree<Layer<ForLoop::Attributes>, Layer<ForLoop::Attributes>>*
create_attributes(int n, int m) {
return new AttributeTree<Layer<ForLoop::Attributes>, Layer<ForLoop::Attributes>>(
new Layer(new ForLoop::Attributes(n)),
new Layer(new ForLoop::Attributes(m))
);
}
};
int main(int argc, const char** argv) {
Algorithm::Instance algorithm;
Algorithm::build<DoubleLoop>(algorithm);
Algorithm::plot(algorithm, "my_algorithm_merged");
auto context = Context::create<DoubleLoop>(3, 5);
Algorithm::run(algorithm, context);
return 0;
}
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)
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
ForLoop::Attributes
Definition: example_ForLoop_main.cpp:13
DoubleLoop::FINAL_STATE
static const State::Id & FINAL_STATE
Definition: example_DoubleLoop_main.cpp:12
DoubleLoop::INITIAL_STATE
static const State::Id & INITIAL_STATE
Definition: example_DoubleLoop_main.cpp:11
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
DoubleLoop::show_double_counter
static void show_double_counter(Context &context)
Definition: example_DoubleLoop_main.cpp:14
DoubleLoop
Definition: example_DoubleLoop_main.cpp:8