+#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 */