state_machine_cpp
example_PowerLoop_main.cpp

This example shows how to import from an existing algorithm

//
// Created by henri on 10/05/21.
//
#include <complex>
#define STATE_MACHINE_CPP_EXAMPLE_FORLOOP_H
#include "../1_ForLoop/example_ForLoop_main.cpp"
class PowerLoop final : public Algorithm::Builder {
public:
struct Attributes {
unsigned int power;
explicit Attributes(unsigned int power) : power(power) {}
};
static AttributeTree<Layer<ForLoop::Attributes, PowerLoop::Attributes>>* create_attributes(int max_iteration, unsigned int power) {
return new AttributeTree<Layer<ForLoop::Attributes, PowerLoop::Attributes>>(
new Layer(new ForLoop::Attributes(max_iteration), new PowerLoop::Attributes(power))
);
}
static const State::Id& INITIAL_STATE;
static const State::Id& FINAL_STATE;
static void print_power_of_iteration(Context& context) {
auto& power_loop_attributes = context.get<PowerLoop::Attributes>();
auto& for_loop_attributes = context.get<ForLoop::Attributes>();
std::cout << for_loop_attributes.iteration << '^' << power_loop_attributes.power
<< " = " << std::pow(for_loop_attributes.iteration, power_loop_attributes.power)
<< std::endl;
}
void build(States &states, Transitions &transitions, Layers &layers) override {
import<ForLoop>(states, transitions, layers);
}
};
int main(int argc, const char** argv) {
Algorithm::Instance algorithm;
Algorithm::build<PowerLoop>(algorithm);
Algorithm::plot(algorithm, "my_algorithm");
auto context = Context::create<PowerLoop>(3, 2);
Algorithm::run(algorithm, context);
}
ForLoop::BEGIN_OF_ITERATION
static const State::Id BEGIN_OF_ITERATION
Definition: example_ForLoop_main.cpp:25
PowerLoop::Attributes::Attributes
Attributes(unsigned int power)
Definition: example_PowerLoop_main.cpp:15
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)
PowerLoop::Attributes::power
unsigned int power
Definition: example_PowerLoop_main.cpp:14
ForLoop::INITIAL_STATE
static const State::Id INITIAL_STATE
Definition: example_ForLoop_main.cpp:23
PowerLoop::create_attributes
static AttributeTree< Layer< ForLoop::Attributes, PowerLoop::Attributes > > * create_attributes(int max_iteration, unsigned int power)
Definition: example_PowerLoop_main.cpp:18
ForLoop::Attributes
Definition: example_ForLoop_main.cpp:13
PowerLoop::print_power_of_iteration
static void print_power_of_iteration(Context &context)
Definition: example_PowerLoop_main.cpp:27
main
int main(int argc, const char **argv)
Definition: example_PowerLoop_main.cpp:45
PowerLoop::INITIAL_STATE
static const State::Id & INITIAL_STATE
Definition: example_PowerLoop_main.cpp:24
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
PowerLoop::Attributes
Definition: example_PowerLoop_main.cpp:13
PowerLoop
Definition: example_PowerLoop_main.cpp:10
PowerLoop::FINAL_STATE
static const State::Id & FINAL_STATE
Definition: example_PowerLoop_main.cpp:25
PowerLoop::build
void build(States &states, Transitions &transitions, Layers &layers) override
Definition: example_PowerLoop_main.cpp:35