Fix building and installing package.
[genetic.git] / include / condition / condition.h
diff --git a/include/condition/condition.h b/include/condition/condition.h
new file mode 100644 (file)
index 0000000..3562129
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef __CONDITION_CONDITION_H
+#define __CONDITION_CONDITION_H
+
+#include "chromosome.h"
+#include "generation.h"
+
+using namespace std;
+
+namespace genetic {
+    /**
+     * Base Condition class.
+     * It is used for checking if algorithm should stop.
+     */
+    template < typename _Chromosome>
+    class Condition {
+    protected:
+        /**
+         * Check calculations for current generation if it passes stop condition
+         * If condition is satisfied, we can check another generation.
+         * All the custom Condition checks should be invoked in this method.
+         *
+         * @param generation current generation to check
+         *
+         * @return true if condition is satisfied and another generation can checked;
+         *      false if condition is not satisfied and algorithm should stop.
+         */
+        virtual bool do_check(Generation<_Chromosome>) = 0;
+
+    public:
+        /**
+         * Checks if current generation passes stop condition.
+         * If condition is satisfied, we can check another generation.
+         *
+         * @param generation current generation to check
+         *
+         * @return true if condition is satisfied and another generation can checked;
+         *      false if condition is not satisfied and algorithm should stop.
+         */
+        bool check(Generation<_Chromosome> generation) {
+            return do_check(generation);
+        }
+    };
+}
+
+#endif /* __CONDITION_CONDITION_H */