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