#include <vector>
-#include <gene.h>
+#include "gene.h"
using namespace std;
namespace genetic {
- template < typename _Chromosome >
+ /**
+ * Chromosome of given Genes.
+ */
+ template < typename _Gene >
class Chromosome {
+ public:
+ /**
+ * Type representing Chromosome Gene
+ */
+ typedef _Gene GeneType;
protected:
- vector<_Chromosome> genes;
+ /**
+ * Genes of the chromosome
+ */
+ vector<_Gene> genes;
+ template<typename> friend class Chromosome;
public:
+ /**
+ * Default constructor
+ */
Chromosome() {}
- Chromosome(vector<_Chromosome> genes) {
+ /**
+ * Class constructor. Initializes Chromosome with the given Gene's
+ *
+ * @param genes vector containing Genes to use in Chromosome
+ */
+ Chromosome(vector<_Gene> genes) {
this->genes = genes;
}
/** Copy constructor */
- Chromosome(const Chromosome& chromosome) : genes(chromosome.get()) {}
+ Chromosome(const Chromosome& chromosome)
+ : genes(chromosome.genes) {
+ }
- Chromosome& operator=(const Chromosome&){
+ /**
+ * Copy operator.
+ *
+ * @param chromosome Chromosome from which the Genes should be copied.
+ * @return Chromosome instance containing copied Genes
+ */
+ Chromosome& operator=(const Chromosome& chromosome) {
+ this->genes = chromosome.genes;
return *this;
}
- vector<_Chromosome> get() {
- return this->genes;
+ /**
+ * Returns number of Genes in current Chromosome
+ *
+ * @return number of Genes in current Chromosome
+ */
+ unsigned int size() const {
+ return this->genes.size();
+ }
+
+ /**
+ * Returns i-th Gene in the current Chromosome
+ *
+ * @return i-th Gene in the current Chromosome
+ */
+ _Gene& operator[](unsigned int i) {
+ return this->genes[i];
}
};
}
-#endif /* __CHROMOSOME_H */
\ No newline at end of file
+#endif /* __CHROMOSOME_H */