Go to the documentation of this file.
8 template <
class _MessageType>
18 template <
class _MessageType>
27 : _observerPriority(observerPriority)
38 cDebug(
"~Observer %s %x", this->
name() ? this->
name() :
"No Name",
this);
39 if (!_subjects.empty())
41 auto copy_subjects = _subjects;
42 cWarn(
"Observer %s %x is not detached!!!!", this->
name() ? this->
name() :
"No Name",
this);
43 for (
auto s : copy_subjects)
70 virtual const char*
name(
void) {
return "<no name>"; }
79 auto it = std::find(_subjects.begin(), _subjects.end(), t);
80 if (it == _subjects.end())
81 _subjects.push_back(t);
83 cWarn(
"Observer is already attached.");
87 auto it = std::find(_subjects.begin(), _subjects.end(), t);
88 if (it != _subjects.end())
91 cWarn(
"Observer is already detached.");
98 std::vector<Subject<_MessageType>*> _subjects;
99 int _observerPriority;
110 template <
class _MessageType>
148 cWarn(
"FATAL ERROR, ~Subject %X call while running notify!" );
154 cWarn(
"Not detached all observers yet" );
168 cWarn(
"Subject try to attach a deleted Observer");
174 std::string name = ToObserv->
name() ? ToObserv->
name() :
"No Name";
175 std::ostringstream oss;
176 oss <<
" " << ToObserv;
183 cWarn(
"Subject %x, attach Observer %s %X while running notify already attached",
this,
184 ToObserv->name() ? ToObserv->name() :
"No Name", ToObserv);
191 cDebug(
"Subject %x, attach Observer %s %X while running notify",
this, ToObserv->name() ? ToObserv->name() :
"No Name", ToObserv);
195 cWarn(
"Subject %x, attach Observer %s %X while running notify already attached",
this,
196 ToObserv->name() ? ToObserv->name() :
"No Name", ToObserv);
202 auto ret =
_ObserverSet.insert(ObserverHolder(ToObserv));
205 cDebug(
"Subject %x, attach Observer %s %X ",
this, ToObserv->name() ? ToObserv->name() :
"No Name", ToObserv);
209 cWarn(
"Subject %x, attach Observer %s %X already attached",
this, ToObserv->name() ? ToObserv->name() :
"No Name", ToObserv);
224 cDebug(
"DETACH 0x%X",ToObserv);
231 cWarn(
"**** Subject %x, detach Observer %s %X while running notify",
this, ToObserv->
name() ? ToObserv->
name() :
"No Name", ToObserv);
232 (*it).isAttached =
false;
238 cWarn(
"**** Subject %x, detach Observer %s %X while running notify",
this, ToObserv->
name() ? ToObserv->
name() :
"No Name", ToObserv);
239 (*it2).isAttached =
false;
245 cWarn(
"**** Subject %x, detach Observer %s %X while running notify",
this, ToObserv->
name() ? ToObserv->
name() :
"No Name", ToObserv);
246 (*it2).isAttached =
false;
254 cDebug(
"Subject %x, detach Observer %s %X",
this, ToObserv->
name() ? ToObserv->
name() :
"No Name", ToObserv);
259 cWarn(
"Subject %x, detach Observer %s %X not found",
this, ToObserv->
name() ? ToObserv->
name() :
"No Name", ToObserv);
293 observer.observerPtr->setDetached(
this);
299 observer.observerPtr->setDetached(
this);
305 observer.observerPtr->setDetached(
this);
324 cWarn(
"ERROR notify_internal, to deep recursion!");
338 std::string observerName = (
observer.observerPtr)->name() ? (
observer.observerPtr)->name() :
"<no Name>";
341 (
observer.observerPtr)->onChange(
this, rcReason);
348 auto myt = t.elapsedMS();
356 cWarn(
" Observer (%s) need %f ms", observerName.c_str(), t.elapsedMS());
358 cDebug(
" Observer (%s) need %f ms", observerName.c_str(), t.elapsedMS());
362 if (
observer.observerPtr->__deadVal == 0xBADEAFFE)
364 (
observer.observerPtr)->onChange(
this, rcReason);
372 cWarn(
"Urgg deleted observer");
388 if (
observer.observerPtr->__deadVal == 0xBADEAFFE)
390 (
observer.observerPtr)->onChange(
this, rcReason);
396 cWarn(
"Urgg deleted observer");
408 if( (counter--) <= 0 )
410 cWarn(
"ERROR _ObserverSet_AddedLater, to many repeats!");
419 for(
auto &message : copy_messages_WhileRunningNotify )
439 for (
auto observer : observerSetCopy)
457 OName =
observer.observerPtr->name();
458 if (OName && strcmp(OName, Name) == 0)
virtual const char * subject_name(void)
Definition: Observer.h:476
void detach(Observer< _MessageType > *ToObserv)
Definition: Observer.h:222
Definition: Observer.h:20
LX_BASE_EXPORT LOGLEVEL getLogLevel()
virtual ~Subject()
Definition: Observer.h:143
ObserverHolder(ObserverType *aobserverPtr)
Definition: Observer.h:121
LX_BASE_EXPORT Base::LogClass cWarn()
basic_observer< entity > observer
Alias declaration for the most common use case.
Definition: entt.hpp:3793
Observer< _MessageType > ObserverType
Definition: Observer.h:114
std::set< ObserverHolder, CompareObservers > ObserverSetType
Definition: Observer.h:501
LX_BASE_EXPORT Base::LogClass cDebug()
_MessageType MessageType
Definition: Observer.h:115
int getObserverPriority() const
Definition: Observer.h:75
void notify_internal(_MessageType &rcReason, size_t deep)
Definition: Observer.h:320
Observer< _MessageType > * get(const char *Name)
Definition: Observer.h:451
void attach(Observer< _MessageType > *ToObserv)
Definition: Observer.h:164
std::map< std::string, double > getObserverTime()
Definition: Observer.h:480
ObserverSetType _ObserverSet_AddedLaterCopy
Set of attached observers at running notify.
Definition: Observer.h:515
bool _running_notify
Definition: Observer.h:517
Subject()
Definition: Observer.h:137
LX_BASE_EXPORT void cDebuggerBreak(const char *message)
void setAttached(Subject< _MessageType > *t)
Definition: Observer.h:77
ObserverSetType _ObserverSet_AddedLater
Set of attached observers.
Definition: Observer.h:514
Subject< _MessageType > SubjectType
Definition: Observer.h:116
void setDetached(Subject< _MessageType > *t)
Definition: Observer.h:85
ObserverType * observerPtr
Definition: Observer.h:125
long __deadVal
Definition: Observer.h:95
bool _allDetachedWhileRunningNotify
Definition: Observer.h:518
virtual const char * name(void)
Definition: Observer.h:70
int observerPriority
Definition: Observer.h:126
virtual void onChange(Subject< _MessageType > *rCaller, _MessageType rcReason)=0
std::list< _MessageType > _messages_WhileRunningNotify
Definition: Observer.h:519
void detachAll()
Definition: Observer.h:285
bool operator()(const ObserverHolder &o1, const ObserverHolder &o2) const
Definition: Observer.h:491
bool isAttached
Definition: Observer.h:127
ObserverSetType _ObserverSet
Definition: Observer.h:513
std::map< std::string, double > _observerTime
Definition: Observer.h:520
Observer(int observerPriority=1)
Definition: Observer.h:26
@ D_DEBUG
Definition: Log.h:18
Definition: Observer.h:119
void notify(_MessageType &rcReason)
Definition: Observer.h:426
Definition: Observer.h:490
virtual void onDestroy(Subject< _MessageType > &)
Definition: Observer.h:63
void resetObserverTime()
Definition: Observer.h:478
Definition: AbstractXMLReader.h:5
virtual ~Observer()
Definition: Observer.h:36