namespace genetic {
/**
- * Generation of given Chromosomes.
+ * Class representing Generation of given Chromosomes.
*/
template < typename _Chromosome >
class Generation {
protected:
+ /**
+ * Chromosomes in the given Generation
+ */
vector<_Chromosome> chromosomes;
+ template<typename> friend class Generation;
public:
+ /**
+ * Default constructor
+ */
Generation() {}
+ /**
+ * Class constructor. Initializes generation with the given chromosomes
+ *
+ * @param chromosomes vector containing Chromosomes to use in Generation
+ */
Generation(vector<_Chromosome> chromosomes) {
this->chromosomes = chromosomes;
}
/** Copy constructor */
Generation(const Generation& generation)
- : chromosomes(generation.get()) {
- }
-
- vector<_Chromosome> get() const {
- return this->chromosomes;
+ : chromosomes(generation.chromosomes) {
}
+ /**
+ * Copy operator.
+ *
+ * @param generation Generation from which the Chromosomes should be copied.
+ * @return Generation instance containing copied Chromosomes
+ */
Generation& operator=(const Generation& generation){
- this->chromosomes = generation.get();
+ this->chromosomes = generation.chromosomes;
return *this;
}
+
+ /**
+ * Returns number of Chromosomes in current Generation
+ *
+ * @return number of Chromosomes in current Generation
+ */
+ unsigned int size() const {
+ return this->chromosomes.size();
+ }
+
+ /**
+ * Returns i-th Chromosome in the current Generation
+ *
+ * @return i-th Chromosome in the current Generation
+ */
+ _Chromosome& operator[](unsigned int i) {
+ return this->chromosomes[i];
+ }
};
}