Ultra 0.9.4
Loading...
Searching...
No Matches
scored_individual.tcc
Go to the documentation of this file.
1
12
13#if !defined(ULTRA_SCORED_INDIVIDUAL_H)
14# error "Don't include this file directly, include the specific .h instead"
15#endif
16
17#if !defined(ULTRA_SCORED_INDIVIDUAL_TCC)
18#define ULTRA_SCORED_INDIVIDUAL_TCC
19
26template<Individual I, Fitness F>
27scored_individual<I, F>::scored_individual(I i, F f)
28 : ind(std::move(i)), fit(std::move(f))
29{
30 Expects(!ind.empty());
31}
32
36template<Individual I, Fitness F>
37bool scored_individual<I, F>::empty() const noexcept
38{
39 return ind.empty();
40}
41
61template<Individual I, Fitness F>
62auto operator<=>(const scored_individual<I, F> &lhs,
63 const scored_individual<I, F> &rhs) noexcept
64{
65 return lhs.fit <=> rhs.fit;
66}
67
78template<Individual I, Fitness F>
79bool scored_individual<I, F>::load(std::istream &in, const problem &p)
80{
81 unsigned known_best(false);
82 if (!(in >> known_best))
83 return false;
84
85 scored_individual tmp;
86 if (known_best)
87 {
88 if (!tmp.ind.load(in, p.sset))
89 return false;
90
91 if (!ultra::load(in, &tmp.fit))
92 return false;
93 }
94
95 *this = tmp;
96 return true;
97}
98
105template<Individual I, Fitness F>
106bool scored_individual<I, F>::save(std::ostream &out) const
107{
108 if (empty())
109 out << "0\n";
110 else
111 {
112 out << "1\n";
113 if (!ind.save(out))
114 return false;
115 if (!ultra::save(out, fit))
116 return false;
117 }
118
119 return out.good();
120}
121
122#endif // include guard
STL namespace.
bool save(std::ostream &out, F f)
Definition fitness.h:151
auto operator<=>(const scored_individual< I, F > &lhs, const scored_individual< I, F > &rhs) noexcept
Definition scored_individual.tcc:62