Created custom Condition class: GenerationLimit.
[genetic.git] / src / chromosome.h
1 #ifndef __CHROMOSOME_H
2 #define __CHROMOSOME_H
3
4 #include <vector>
5
6 #include "gene.h"
7
8 using namespace std;
9
10 namespace genetic {
11     /**
12      * Chromosome of given Genes.
13      */
14     template < typename _Gene >
15     class Chromosome {
16     public:
17         /**
18          * Type representing Chromosome Gene
19          */
20         typedef _Gene GeneType;
21     protected:
22         /**
23          * Genes of the chromosome
24          */
25         vector<_Gene> genes;
26
27         template<typename> friend class Chromosome;
28     public:
29         /**
30          * Default constructor
31          */
32         Chromosome() {}
33
34         /**
35          * Class constructor. Initializes Chromosome with the given Gene's
36          *
37          * @param genes vector containing Genes to use in Chromosome
38          */
39         Chromosome(vector<_Gene> genes) {
40             this->genes = genes;
41         }
42
43         /** Copy constructor */
44         Chromosome(const Chromosome& chromosome)
45             : genes(chromosome.genes) {
46         }
47
48         /**
49          * Copy operator.
50          *
51          * @param chromosome Chromosome from which the Genes should be copied.
52          * @return Chromosome instance containing copied Genes
53          */
54         Chromosome& operator=(const Chromosome& chromosome) {
55             this->genes = chromosome.genes;
56             return *this;
57         }
58
59         /**
60          * Returns number of Genes in current Chromosome
61          *
62          * @return number of Genes in current Chromosome
63          */
64         unsigned int size() const {
65             return this->genes.size();
66         }
67
68         /**
69          * Returns i-th Gene in the current Chromosome
70          *
71          * @return i-th Gene in the current Chromosome
72          */
73         _Gene& operator[](unsigned int i) {
74             return this->genes[i];
75         }
76     };
77 }
78
79 #endif /* __CHROMOSOME_H */