diff options
author | orivej <orivej@yandex-team.ru> | 2022-02-10 16:45:01 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:45:01 +0300 |
commit | 2d37894b1b037cf24231090eda8589bbb44fb6fc (patch) | |
tree | be835aa92c6248212e705f25388ebafcf84bc7a1 /contrib/libs/poco/Foundation/include/Poco/Observer.h | |
parent | 718c552901d703c502ccbefdfc3c9028d608b947 (diff) | |
download | ydb-2d37894b1b037cf24231090eda8589bbb44fb6fc.tar.gz |
Restoring authorship annotation for <orivej@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'contrib/libs/poco/Foundation/include/Poco/Observer.h')
-rw-r--r-- | contrib/libs/poco/Foundation/include/Poco/Observer.h | 248 |
1 files changed, 124 insertions, 124 deletions
diff --git a/contrib/libs/poco/Foundation/include/Poco/Observer.h b/contrib/libs/poco/Foundation/include/Poco/Observer.h index 110c5bd918..98d94e0621 100644 --- a/contrib/libs/poco/Foundation/include/Poco/Observer.h +++ b/contrib/libs/poco/Foundation/include/Poco/Observer.h @@ -1,124 +1,124 @@ -// -// Observer.h -// -// Library: Foundation -// Package: Notifications -// Module: NotificationCenter -// -// Definition of the Observer class template. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Foundation_Observer_INCLUDED -#define Foundation_Observer_INCLUDED - - -#include "Poco/Foundation.h" -#include "Poco/AbstractObserver.h" -#include "Poco/Mutex.h" - - -namespace Poco { - - -template <class C, class N> -class Observer: public AbstractObserver - /// This template class implements an adapter that sits between - /// a NotificationCenter and an object receiving notifications - /// from it. It is quite similar in concept to the - /// RunnableAdapter, but provides some NotificationCenter - /// specific additional methods. - /// See the NotificationCenter class for information on how - /// to use this template class. - /// - /// Instead of the Observer class template, you might want to - /// use the NObserver class template, which uses an AutoPtr to - /// pass the Notification to the callback function, thus freeing - /// you from memory management issues. -{ -public: - typedef void (C::*Callback)(N*); - - Observer(C& object, Callback method): - _pObject(&object), - _method(method) - { - } - - Observer(const Observer& observer): - AbstractObserver(observer), - _pObject(observer._pObject), - _method(observer._method) - { - } - - ~Observer() - { - } - - Observer& operator = (const Observer& observer) - { - if (&observer != this) - { - _pObject = observer._pObject; - _method = observer._method; - } - return *this; - } - - void notify(Notification* pNf) const - { - Poco::Mutex::ScopedLock lock(_mutex); - - if (_pObject) - { - N* pCastNf = dynamic_cast<N*>(pNf); - if (pCastNf) - { - pCastNf->duplicate(); - (_pObject->*_method)(pCastNf); - } - } - } - - bool equals(const AbstractObserver& abstractObserver) const - { - const Observer* pObs = dynamic_cast<const Observer*>(&abstractObserver); - return pObs && pObs->_pObject == _pObject && pObs->_method == _method; - } - - bool accepts(Notification* pNf) const - { - return dynamic_cast<N*>(pNf) != 0; - } - - AbstractObserver* clone() const - { - return new Observer(*this); - } - - void disable() - { - Poco::Mutex::ScopedLock lock(_mutex); - - _pObject = 0; - } - -private: - Observer(); - - C* _pObject; - Callback _method; - mutable Poco::Mutex _mutex; -}; - - -} // namespace Poco - - -#endif // Foundation_Observer_INCLUDED +// +// Observer.h +// +// Library: Foundation +// Package: Notifications +// Module: NotificationCenter +// +// Definition of the Observer class template. +// +// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Foundation_Observer_INCLUDED +#define Foundation_Observer_INCLUDED + + +#include "Poco/Foundation.h" +#include "Poco/AbstractObserver.h" +#include "Poco/Mutex.h" + + +namespace Poco { + + +template <class C, class N> +class Observer: public AbstractObserver + /// This template class implements an adapter that sits between + /// a NotificationCenter and an object receiving notifications + /// from it. It is quite similar in concept to the + /// RunnableAdapter, but provides some NotificationCenter + /// specific additional methods. + /// See the NotificationCenter class for information on how + /// to use this template class. + /// + /// Instead of the Observer class template, you might want to + /// use the NObserver class template, which uses an AutoPtr to + /// pass the Notification to the callback function, thus freeing + /// you from memory management issues. +{ +public: + typedef void (C::*Callback)(N*); + + Observer(C& object, Callback method): + _pObject(&object), + _method(method) + { + } + + Observer(const Observer& observer): + AbstractObserver(observer), + _pObject(observer._pObject), + _method(observer._method) + { + } + + ~Observer() + { + } + + Observer& operator = (const Observer& observer) + { + if (&observer != this) + { + _pObject = observer._pObject; + _method = observer._method; + } + return *this; + } + + void notify(Notification* pNf) const + { + Poco::Mutex::ScopedLock lock(_mutex); + + if (_pObject) + { + N* pCastNf = dynamic_cast<N*>(pNf); + if (pCastNf) + { + pCastNf->duplicate(); + (_pObject->*_method)(pCastNf); + } + } + } + + bool equals(const AbstractObserver& abstractObserver) const + { + const Observer* pObs = dynamic_cast<const Observer*>(&abstractObserver); + return pObs && pObs->_pObject == _pObject && pObs->_method == _method; + } + + bool accepts(Notification* pNf) const + { + return dynamic_cast<N*>(pNf) != 0; + } + + AbstractObserver* clone() const + { + return new Observer(*this); + } + + void disable() + { + Poco::Mutex::ScopedLock lock(_mutex); + + _pObject = 0; + } + +private: + Observer(); + + C* _pObject; + Callback _method; + mutable Poco::Mutex _mutex; +}; + + +} // namespace Poco + + +#endif // Foundation_Observer_INCLUDED |