Ultra 0.9.4
Loading...
Searching...
No Matches
hga/primitive.h
Go to the documentation of this file.
1
12
13#if !defined(ULTRA_HGA_PRIMITIVE_H)
14#define ULTRA_HGA_PRIMITIVE_H
15
16#include <algorithm>
17#include <string>
18
19#include "kernel/random.h"
20#include "kernel/terminal.h"
21
22namespace ultra::hga
23{
24
28class integer : public terminal
29{
30public:
46 explicit integer(interval<int> interval = {-1000, 1000},
48 : terminal("INTEGER", category), interval_(interval)
49 {
50 }
51
52 [[nodiscard]] constexpr int min() const noexcept { return interval_.min; }
53 [[nodiscard]] constexpr int sup() const noexcept { return interval_.sup; }
54
55 [[nodiscard]] value_t instance() const final
56 { return random::element(interval_); }
57
58private:
59 const interval<int> interval_;
60};
61
62class permutation : public terminal
63{
64public:
72 explicit permutation(
73 std::size_t length,
75 : terminal("PERMUTATION", category), base_(length)
76 {
77 std::iota(base_.begin(), base_.end(), 0);
78 }
79
80 [[nodiscard]] std::size_t length() const noexcept
81 { return base_.size(); }
82
83 [[nodiscard]] value_t instance() const final
84 {
85 auto ret(base_);
86 std::ranges::shuffle(ret, random::engine());
87 return ret;
88 }
89
90private:
91 D_IVECTOR base_;
92};
93
94} // namespace ultra::hga
95
96#endif // include guard
integer(interval< int > interval={-1000, 1000}, symbol::category_t category=symbol::undefined_category)
Definition hga/primitive.h:46
value_t instance() const final
Definition hga/primitive.h:55
permutation(std::size_t length, symbol::category_t category=symbol::undefined_category)
Definition hga/primitive.h:72
value_t instance() const final
Definition hga/primitive.h:83
static constexpr category_t undefined_category
Sentinel value indicating that the category has not yet been assigned.
Definition symbol.h:61
category_t category() const noexcept
Definition symbol.cc:79
unsigned category_t
Definition symbol.h:55
Definition terminal.h:41
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
engine_t & engine()
Definition random.cc:83
std::ranges::range_reference_t< const C > element(const C &c)
Definition random.h:114
Definition interval.h:37