Ultra 0.9.4
Loading...
Searching...
No Matches
value.h
Go to the documentation of this file.
1
12
13#if !defined(ULTRA_VALUE_H)
14#define ULTRA_VALUE_H
15
16#include <iosfwd>
17#include <string>
18#include <variant>
19#include <vector>
20
21namespace ultra
22{
23
24class nullary;
25namespace src { class variable; }
26
28enum class param_address : std::size_t;
29
30constexpr param_address operator""_addr(unsigned long long a)
31{
32 return static_cast<param_address>(a);
33}
34
38enum domain_t {d_void = 0, d_int, d_double, d_string, d_nullary, d_address,
39 d_variable, d_ivector};
40
41using D_VOID = std::monostate;
42using D_INT = int;
43using D_DOUBLE = double;
44using D_STRING = std::string;
45using D_NULLARY = nullary;
46using D_ADDRESS = param_address;
47using D_VARIABLE = src::variable;
48using D_IVECTOR = std::vector<int>;
49
54using value_t = std::variant<D_VOID, D_INT, D_DOUBLE, D_STRING,
55 const D_NULLARY *, D_ADDRESS, const D_VARIABLE *,
56 D_IVECTOR>;
57
58[[nodiscard]] bool basic_data_type(domain_t) noexcept;
59[[nodiscard]] bool basic_data_type(const value_t &) noexcept;
60[[nodiscard]] const D_NULLARY *get_if_nullary(const value_t &) noexcept;
61[[nodiscard]] bool has_value(const value_t &) noexcept;
62[[nodiscard]] bool numerical_data_type(domain_t) noexcept;
63[[nodiscard]] bool numerical_data_type(const value_t &) noexcept;
64
65std::ostream &operator<<(std::ostream &, const value_t &);
66
67// Serialization.
68class symbol_set;
69bool load(std::istream &, const symbol_set &, value_t &);
70bool save(std::ostream &, const value_t &);
71
72} // namespace ultra
73
74#endif // include guard
Definition nullary.h:31
Definition variable.h:26
Definition symbol_set.h:115
bool load(std::istream &in, F *f)
Definition fitness.tcc:190
const D_NULLARY * get_if_nullary(const value_t &v) noexcept
Definition value.cc:86
bool save(std::ostream &out, F f)
Definition fitness.h:151
bool basic_data_type(domain_t d) noexcept
Definition value.cc:40
bool has_value(const value_t &v) noexcept
Definition value.cc:31
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
bool numerical_data_type(domain_t d) noexcept
Definition value.cc:65
domain_t
Definition value.h:38