GENEIAL  0.2=/
 All Classes Pages
AlgorithmObserver.h
1 #pragma once
2 
3 #include <geneial/namespaces.h>
4 #include <geneial/algorithm/BaseGeneticAlgorithm.h>
5 #include <geneial/core/population/management/BaseManager.h>
6 
7 #include <set>
8 
9 
10 geneial_private_namespace(geneial)
11 {
12 geneial_private_namespace(algorithm)
13 {
14 using ::geneial::algorithm::stopping_criteria::BaseStoppingCriterion;
15 using ::geneial::population::management::BaseManager;
16 
17 geneial_export_namespace
18 {
19 template<typename FITNESS_TYPE>
20 class AlgorithmObserver
21 {
22 public:
23  enum ObserveableEvent
24  {
25  BEFORE_GENERATION, AFTER_GENERATION, CRITERIA_REACHED
26  };
27 
28  virtual ~AlgorithmObserver()
29  {
30  }
31 
32  virtual void updateBeforeGeneration(BaseManager<FITNESS_TYPE> &manager)
33  {
34  }
35 
36  virtual void updateAfterGeneration(BaseManager<FITNESS_TYPE> &manager)
37  {
38  }
39 
40 
41  virtual void updateCriteriaReached(BaseManager<FITNESS_TYPE> &manager,
42  const BaseStoppingCriterion<FITNESS_TYPE>& criteria)
43  {
44  }
45 
46  const std::set<ObserveableEvent>& getSubscribedEvents() const
47  {
48  return _subscribedEvents;
49  }
50 
51  void setSubscribedEvents(const std::set<ObserveableEvent>& subscribedEvents)
52  {
53  _subscribedEvents = subscribedEvents;
54  }
55 
56  void addSubscribedEvent(ObserveableEvent e)
57  {
58  _subscribedEvents.insert(e);
59  }
60 
61  void removeSubscribedEvent(ObserveableEvent e)
62  {
63  _subscribedEvents.erase(e);
64  }
65 
66 private:
67  std::set<ObserveableEvent> _subscribedEvents;
68 
69 };
70 
71 } /* geneial_export_namespace */
72 } /* private namespace algorithm */
73 } /* private namespace geneial */
74