GENEIAL  0.2=/
 All Classes Pages
NegationDecorator.h
1 #pragma once
2 
3 #include <geneial/algorithm/criteria/BaseStoppingCriterion.h>
4 #include <geneial/core/population/Population.h>
5 
6 
7 geneial_private_namespace(geneial)
8 {
9 geneial_private_namespace(algorithm)
10 {
11 geneial_private_namespace(stopping_criteria)
12 {
13 using ::geneial::population::management::BaseManager;
14 
15 geneial_export_namespace
16 {
17 
21 template<typename FITNESS_TYPE>
22 class NegationDecorator: public BaseStoppingCriterion<FITNESS_TYPE>
23 {
24 public:
25  typedef typename BaseStoppingCriterion<FITNESS_TYPE>::ptr criterion;
26 
27  NegationDecorator(typename BaseStoppingCriterion<FITNESS_TYPE>::ptr criterion) :
28  _criterion(criterion)
29  {
30  }
31 
32  virtual ~NegationDecorator()
33  {
34  }
35 
36  virtual inline bool wasReached(BaseManager<FITNESS_TYPE> &manager)
37  {
38  return !(_criterion->wasReached(manager));
39  }
40 
41  virtual void print(std::ostream& os) const
42  {
43  os << "Negated (" << _criterion << ")";
44  }
45 
46  const criterion& getCriterion() const
47  {
48  return _criterion;
49  }
50 
51  void setCriterion(const criterion& criterion)
52  {
53  _criterion = criterion;
54  }
55 
56 private:
57  criterion _criterion;
58 
59 };
60 
61 } /* geneial_export_namespace */
62 } /* private namespace stopping_criteria */
63 } /* private namespace algorithm */
64 } /* private namespace geneial */