www.cemf.ir
observer.hpp
Go to the documentation of this file.
1 /*------------------------------- phasicFlow ---------------------------------
2  O C enter of
3  O O E ngineering and
4  O O M ultiscale modeling of
5  OOOOOOO F luid flow
6 ------------------------------------------------------------------------------
7  Copyright (C): www.cemf.ir
8  email: hamid.r.norouzi AT gmail.com
9 ------------------------------------------------------------------------------
10 Licence:
11  This file is part of phasicFlow code. It is a free software for simulating
12  granular and multiphase flows. You can redistribute it and/or modify it under
13  the terms of GNU General Public License v3 or any other later versions.
14 
15  phasicFlow is distributed to help others in their research in the field of
16  granular and multiphase flows, but WITHOUT ANY WARRANTY; without even the
17  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 
19 -----------------------------------------------------------------------------*/
20 
21 
22 #ifndef __observer_hpp__
23 #define __observer_hpp__
24 
25 #include "message.hpp"
26 
27 namespace pFlow
28 {
29 
30 class subscriber;
31 class anyList;
32 
33 class observer
34 {
35 private:
36 
37 
39  const subscriber* subscriber_ = nullptr;
40 
43 
44  friend subscriber;
45 
46  const subscriber* changeSubscriber(const subscriber* newSub);
47 
48  inline void invalidateSubscriber()
49  {
50  subscriber_ = nullptr;
51  }
52 
53 public:
54 
55  observer(message msg);
56 
57  observer(
58  const subscriber* subscrbr,
59  message msg);
60 
61  virtual
62  ~observer();
63 
64  void subscribe(
65  const subscriber* subscrbr,
66  message msg);
67 
69 
70  inline
71  bool subscribed()const
72  {
73  return subscriber_!=nullptr;
74  }
75 
76  void addToSubscriber(
77  const subscriber* subscrbr,
78  message msg);
79 
81 
82 
83 
84  static
85  constexpr auto numEvents()
86  {
87  return message::numEvents();
88  }
89 
90  virtual bool hearChanges(
91  real t,
92  real dt,
93  uint32 iter,
94  const message& msg,
95  const anyList& varList)=0;
96 };
97 
98 } // pFlow
99 
100 
101 #endif // __observer_hpp__
pFlow::observer::numEvents
static constexpr auto numEvents()
Definition: observer.hpp:85
pFlow::observer
Definition: observer.hpp:33
pFlow::message
Definition: message.hpp:33
pFlow::real
float real
Definition: builtinTypes.hpp:45
message.hpp
pFlow::observer::observer
observer(message msg)
Definition: observer.cpp:31
pFlow::observer::message_
message message_
list of events in the message
Definition: observer.hpp:42
pFlow::uint32
unsigned int uint32
Definition: builtinTypes.hpp:56
pFlow::message::numEvents
static constexpr auto numEvents()
Definition: message.hpp:177
pFlow::observer::addEvent
observer & addEvent(message::EVENT event)
Definition: observer.cpp:51
pFlow::subscriber
Definition: subscriber.hpp:37
pFlow::message::EVENT
EVENT
Definition: message.hpp:36
pFlow
Definition: demGeometry.hpp:27
pFlow::anyList
Definition: anyList.hpp:35
pFlow::observer::subscribed
bool subscribed() const
Definition: observer.hpp:71
pFlow::observer::subscriber
friend subscriber
Definition: observer.hpp:44
pFlow::observer::subscriber_
const subscriber * subscriber_
pointer to subscriber
Definition: observer.hpp:39
pFlow::observer::addToSubscriber
void addToSubscriber(const subscriber *subscrbr, message msg)
Definition: observer.cpp:67
pFlow::observer::hearChanges
virtual bool hearChanges(real t, real dt, uint32 iter, const message &msg, const anyList &varList)=0
pFlow::observer::invalidateSubscriber
void invalidateSubscriber()
Definition: observer.hpp:48
pFlow::observer::~observer
virtual ~observer()
Definition: observer.cpp:44
pFlow::observer::subscribe
void subscribe(const subscriber *subscrbr, message msg)
pFlow::observer::changeSubscriber
const subscriber * changeSubscriber(const subscriber *newSub)
Definition: observer.cpp:24