scarlet_queen_fitness/
ord.rs

1use 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}