source: XMLIO_V2/external/src/POCO/Foundation.save/Poco/Observer.h @ 80

Last change on this file since 80 was 80, checked in by ymipsl, 14 years ago

ajout lib externe

  • Property svn:eol-style set to native
File size: 3.5 KB
Line 
1//
2// Observer.h
3//
4// $Id: //poco/1.3/Foundation/include/Poco/Observer.h#1 $
5//
6// Library: Foundation
7// Package: Notifications
8// Module:  NotificationCenter
9//
10// Definition of the Observer class template.
11//
12// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
13// and Contributors.
14//
15// Permission is hereby granted, free of charge, to any person or organization
16// obtaining a copy of the software and accompanying documentation covered by
17// this license (the "Software") to use, reproduce, display, distribute,
18// execute, and transmit the Software, and to prepare derivative works of the
19// Software, and to permit third-parties to whom the Software is furnished to
20// do so, all subject to the following:
21//
22// The copyright notices in the Software and this entire statement, including
23// the above license grant, this restriction and the following disclaimer,
24// must be included in all copies of the Software, in whole or in part, and
25// all derivative works of the Software, unless such copies or derivative
26// works are solely in the form of machine-executable object code generated by
27// a source language processor.
28//
29// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
30// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
31// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
32// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
33// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
34// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
35// DEALINGS IN THE SOFTWARE.
36//
37
38
39#ifndef Foundation_Observer_INCLUDED
40#define Foundation_Observer_INCLUDED
41
42
43#include "Poco/Foundation.h"
44#include "Poco/AbstractObserver.h"
45
46
47namespace Poco {
48
49
50template <class C, class N>
51class Observer: public AbstractObserver
52        /// This template class implements an adapter that sits between
53        /// a NotificationCenter and an object receiving notifications
54        /// from it. It is quite similar in concept to the
55        /// RunnableAdapter, but provides some NotificationCenter
56        /// specific additional methods.
57        /// See the NotificationCenter class for information on how
58        /// to use this template class.
59        ///
60        /// Instead of the Observer class template, you might want to
61        /// use the NObserver class template, which uses an AutoPtr to
62        /// pass the Notification to the callback function, thus freeing
63        /// you from memory management issues.
64{
65public:
66        typedef void (C::*Callback)(N*);
67
68        Observer(C& object, Callback method): 
69                _pObject(&object), 
70                _method(method)
71        {
72        }
73       
74        Observer(const Observer& observer):
75                AbstractObserver(observer),
76                _pObject(observer._pObject), 
77                _method(observer._method)
78        {
79        }
80       
81        ~Observer()
82        {
83        }
84       
85        Observer& operator = (const Observer& observer)
86        {
87                if (&observer != this)
88                {
89                        _pObject = observer._pObject;
90                        _method  = observer._method;
91                }
92                return *this;
93        }
94       
95        void notify(Notification* pNf) const
96        {
97                N* pCastNf = dynamic_cast<N*>(pNf);
98                if (pCastNf)
99                {
100                        pCastNf->duplicate();
101                        (_pObject->*_method)(pCastNf);
102                }
103        }
104       
105        bool equals(const AbstractObserver& abstractObserver) const
106        {
107                const Observer* pObs = dynamic_cast<const Observer*>(&abstractObserver);
108                return pObs && pObs->_pObject == _pObject && pObs->_method == _method;
109        }
110
111        bool accepts(Notification* pNf) const
112        {
113                return dynamic_cast<N*>(pNf) != 0;
114        }
115       
116        AbstractObserver* clone() const
117        {
118                return new Observer(*this);
119        }
120       
121private:
122        Observer();
123
124        C*       _pObject;
125        Callback _method;
126};
127
128
129} // namespace Poco
130
131
132#endif // Foundation_Observer_INCLUDED
Note: See TracBrowser for help on using the repository browser.