Ultra 0.9.4
Loading...
Searching...
No Matches
individual.tcc
Go to the documentation of this file.
1
12
13#if !defined(ULTRA_HGA_INDIVIDUAL_H)
14# error "Don't include this file directly, include the specific .h instead"
15#endif
16
17#if !defined(ULTRA_HGA_INDIVIDUAL_TCC)
18#define ULTRA_HGA_INDIVIDUAL_TCC
19
35{
36public:
43 [[nodiscard]] const individual& self() const noexcept { return ind_; }
44
45 [[nodiscard]] auto &genome() noexcept { return ind_.genome_; }
46
56 [[nodiscard]] value_type &operator[](std::size_t i) noexcept
57 {
58 Expects(i < size());
59 return ind_.genome_[i];
60 }
61
65 [[nodiscard]] std::size_t size() const noexcept
66 {
67 return self().size();
68 }
69
70private:
71 friend class individual;
72
77 explicit modify_proxy(individual& ind) noexcept : ind_(ind) {}
78
79 individual &ind_;
80};
81
98template<class F>
99 requires
100 std::invocable<F &, individual::modify_proxy &>
101 && std::same_as<std::invoke_result_t<F &, individual::modify_proxy&>, void>
102void individual::modify(F &&f)
103{
104 modify_proxy m(*this);
105 f(m);
106
107 signature_ = hash();
108 Ensures(is_valid());
109}
110
111#endif // include guard
Definition individual.tcc:35
const individual & self() const noexcept
Definition individual.tcc:43
std::size_t size() const noexcept
Definition individual.tcc:65
value_type & operator[](std::size_t i) noexcept
Definition individual.tcc:56