diff options
author | Romain Forlot <romain.forlot@iot.bzh> | 2017-09-25 01:10:42 +0200 |
---|---|---|
committer | Romain Forlot <romain.forlot@iot.bzh> | 2017-12-14 11:00:25 +0100 |
commit | 1a832ce483ff8c1276bc3cd3d97e3caadb38c4df (patch) | |
tree | c0d62a2ef4aff80eebea1454124a324ca6ccc5d2 /signal-composer-binding/observer-pattern.hpp | |
parent | 51ee5299a7db41e52da2cf52dd9cd9c05b76740a (diff) |
Implement recursionCheck using observer pattern
Change-Id: Ic404c098f316106abe1918c3cd100ae047f4f555
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
Diffstat (limited to 'signal-composer-binding/observer-pattern.hpp')
-rw-r--r-- | signal-composer-binding/observer-pattern.hpp | 41 |
1 files changed, 8 insertions, 33 deletions
diff --git a/signal-composer-binding/observer-pattern.hpp b/signal-composer-binding/observer-pattern.hpp index aba2847..940a80b 100644 --- a/signal-composer-binding/observer-pattern.hpp +++ b/signal-composer-binding/observer-pattern.hpp @@ -63,31 +63,11 @@ public: if(it != observableList_.end()) {observableList_.erase(it);} } -/* - void recursionCheck(T* obs) - { - for (const auto& obs: observersList_) - { - if( id_ == obs->id()) - {return -1;} - if( origId == obs->id()) - {return -1;} - if(! obs->recursionCheck(origId)) - {return -1;} - } - return 0; - } -*/ }; template <class T> class Observable { -private: - std::list<Observer<T>*> observerList_; - typedef typename std::list<Observer<T>*>::iterator iterator_; - typedef typename std::list<Observer<T>*>::const_iterator const_iterator_; - public: void addObserver(Observer<T>* observer) { @@ -101,19 +81,10 @@ public: if(it != observerList_.end()) {observerList_.erase(it);} } -/* - int recursionCheck() - { - for (auto& obs: observerList_) - { - if( static_cast<T*>(obs) == static_cast<T*>(this)) - {return -1;} - if( obs->recursionCheck(id_)) - {return -1;} - } - return 0; - } -*/ + + virtual int initialRecursionCheck() = 0; + virtual int recursionCheck(T* obs) = 0; + virtual ~Observable() { iterator_ itb = observerList_.begin(); @@ -126,6 +97,10 @@ public: } protected: + std::list<Observer<T>*> observerList_; + typedef typename std::list<Observer<T>*>::iterator iterator_; + typedef typename std::list<Observer<T>*>::const_iterator const_iterator_; + void notify() { iterator_ itb=observerList_.begin(); |