Vita
constant.h
Go to the documentation of this file.
1
13#if !defined(VITA_SRC_CONSTANT_H)
14#define VITA_SRC_CONSTANT_H
15
16#include "kernel/gp/terminal.h"
17#include "utility/utility.h"
18
19namespace vita
20{
21
25template<class T>
26class constant : public terminal
27{
28public:
29 explicit constant(const std::string &c, category_t t = 0)
30 : terminal(c, t), val_(lexical_cast<T>(c)) {}
31 explicit constant(T c, category_t t = 0)
32 : constant(std::to_string(c), t) {}
33
39 [[nodiscard]] std::string display(terminal_param_t, format) const final
40 { return std::to_string(val_); }
41
47 value_t eval(symbol_params &) const override { return eval(); }
48 value_t eval() const { return val_; }
49
50private:
51 T val_;
52};
53
54template<>
55class constant<std::string> : public terminal
56{
57public:
58 explicit constant(const std::string &c, category_t t = 0)
59 : terminal(quote_str(c), t), val_(c) {}
60 explicit constant(const char c[], category_t t = 0)
61 : constant(std::string(c), t) {}
62
63 [[nodiscard]] std::string display(terminal_param_t, format) const final
64 {
65 return quote_str(val_);
66 }
67
75 value_t eval(symbol_params &) const override { return eval(); }
76 value_t eval() const { return val_; }
77
78private:
79 static std::string quote_str(const std::string &s) { return "\"" + s + "\"";}
80
81 std::string val_;
82};
83
84} // namespace vita
85
86#endif // include guard
value_t eval(symbol_params &) const override
Definition: constant.h:75
std::string display(terminal_param_t, format) const final
Definition: constant.h:63
A constant value in a given domain.
Definition: constant.h:27
std::string display(terminal_param_t, format) const final
Definition: constant.h:39
value_t eval(symbol_params &) const override
Definition: constant.h:47
An interface for parameter passing to functions / terminals.
format
Symbol rendering format.
Definition: symbol.h:39
bool terminal() const
Definition: symbol.h:153
A symbol with zero-arity.
Definition: terminal.h:27
The main namespace for the project.
std::size_t category_t
A category provide operations which supplement or supersede those of the domain but which are restric...
Definition: common.h:44
std::variant< D_VOID, D_INT, D_DOUBLE, D_STRING > value_t
A variant containing the data types used by the interpreter for internal calculations / output value ...
Definition: value.h:45