Fix building and installing package.
[genetic.git] / include / chromosome.h
diff --git a/include/chromosome.h b/include/chromosome.h
new file mode 100644 (file)
index 0000000..08d24c9
--- /dev/null
@@ -0,0 +1,79 @@
+#ifndef __CHROMOSOME_H
+#define __CHROMOSOME_H
+
+#include <vector>
+
+#include "gene.h"
+
+using namespace std;
+
+namespace genetic {
+    /**
+     * Chromosome of given Genes.
+     */
+    template < typename _Gene >
+    class Chromosome {
+    public:
+        /**
+         * Type representing Chromosome Gene
+         */
+        typedef _Gene GeneType;
+    protected:
+        /**
+         * Genes of the chromosome
+         */
+        vector<_Gene> genes;
+
+        template<typename> friend class Chromosome;
+    public:
+        /**
+         * Default constructor
+         */
+        Chromosome() {}
+
+        /**
+         * 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.genes) {
+        }
+
+        /**
+         * 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;
+        }
+
+        /**
+         * 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 */