Ultra 0.9.4
Loading...
Searching...
No Matches
interpreter.h
Go to the documentation of this file.
1
12
13#if !defined(ULTRA_INTERPRETER_H)
14#define ULTRA_INTERPRETER_H
15
17
18namespace ultra
19{
60{
61public:
62 explicit interpreter(const gp::individual &);
63 virtual ~interpreter() = default;
64
65 value_t run(const locus &);
66 value_t run();
67
68 [[nodiscard]] value_t fetch_arg(std::size_t) const final;
69 [[nodiscard]] value_t fetch_opaque_arg(std::size_t) const final;
70
71 void rebind(const gp::individual &) noexcept;
72
73 [[nodiscard]] bool is_valid() const;
74
75 [[nodiscard]] const gp::individual &program() const noexcept;
76
77private:
78 [[nodiscard]] const gene &current_gene() const noexcept;
79
80 const gp::individual *prg_;
81
82 struct elem_ { value_t value; std::uint8_t stamp {0}; };
83 mutable matrix<elem_> cache_;
84
85 mutable locus ip_ {}; // instruction pointer
86 std::uint8_t stamp_ {0};
87};
88
89extern value_t run(const gp::individual &);
90
91} // namespace ultra
92
93#endif // include guard
Definition function.h:108
Definition gp/individual.h:66
value_t fetch_opaque_arg(std::size_t) const final
Definition interpreter.cc:182
value_t run()
Definition interpreter.cc:107
bool is_valid() const
Definition interpreter.cc:222
interpreter(const gp::individual &)
Definition interpreter.cc:32
const gp::individual & program() const noexcept
Definition interpreter.cc:212
void rebind(const gp::individual &) noexcept
Definition interpreter.cc:65
value_t fetch_arg(std::size_t) const final
Definition interpreter.cc:131
value_t run(const gp::individual &ind)
Definition interpreter.cc:239
std::variant< D_VOID, D_INT, D_DOUBLE, D_STRING, const D_NULLARY *, D_ADDRESS, const D_VARIABLE *, D_IVECTOR > value_t
Definition value.h:54
Definition gene.h:55
Definition locus.h:26