scarlet_queen_fitness/
ord.rs1use std::rc::Rc;
2
3use scarlet_queen_core::{EachCrateIndividual, FitnessIndividualTrait, Individual};
4
5pub struct GeFitness<T>
6where
7 T: Ord,
8{
9 individual: Rc<Individual<T>>,
10}
11
12impl<T> EachCrateIndividual for GeFitness<T>
13where
14 T: Ord,
15{
16 type Item = T;
17
18 fn new(individual: &Rc<Individual<Self::Item>>) -> Self {
19 GeFitness {
20 individual: Rc::clone(individual),
21 }
22 }
23
24 fn get_individual(&self) -> &Individual<Self::Item> {
25 &self.individual
26 }
27}
28
29impl<T> FitnessIndividualTrait for GeFitness<T>
30where
31 T: Ord,
32{
33 fn fitness(&self, other: &Self) -> usize {
34 if self.get_value() >= other.get_value() {
35 1
36 } else {
37 0
38 }
39 }
40}
41
42pub struct GtFitness<T>
43where
44 T: Ord,
45{
46 individual: Rc<Individual<T>>,
47}
48
49impl<T> EachCrateIndividual for GtFitness<T>
50where
51 T: Ord,
52{
53 type Item = T;
54
55 fn new(individual: &Rc<Individual<Self::Item>>) -> Self {
56 GtFitness {
57 individual: Rc::clone(individual),
58 }
59 }
60
61 fn get_individual(&self) -> &Individual<Self::Item> {
62 &self.individual
63 }
64}
65
66impl<T> FitnessIndividualTrait for GtFitness<T>
67where
68 T: Ord,
69{
70 fn fitness(&self, other: &Self) -> usize {
71 if self.get_value() > other.get_value() {
72 1
73 } else {
74 0
75 }
76 }
77}