Rosetta
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Observer.hh
Go to the documentation of this file.
1 #ifndef INCLUDED_ObjexxFCL_Observer_hh
2 #define INCLUDED_ObjexxFCL_Observer_hh
3 
4 
5 // Observer: Combined Subject + Observer Abstract Base Class
6 //
7 // Project: Objexx Fortran Compatibility Library (ObjexxFCL)
8 //
9 // Version: 3.0.0
10 //
11 // Language: C++
12 //
13 // Copyright (c) 2000-2009 Objexx Engineering, Inc. All Rights Reserved.
14 // Use of this source code or any derivative of it is restricted by license.
15 // Licensing is available from Objexx Engineering, Inc.: http://objexx.com Objexx@objexx.com
16 
17 
18 // ObjexxFCL Headers
20 
21 
22 namespace ObjexxFCL {
23 
24 
25 /// @brief Observer: Combined Subject + Observer Abstract Base Class
26 class Observer
27 {
28 
29 
30 protected: // Creation
31 
32 
33  /// @brief Default Constructor
34  inline
36  {}
37 
38 
39  /// @brief Copy Constructor
40  inline
41  Observer( Observer const & )
42  {}
43 
44 
45 public: // Creation
46 
47 
48  /// @brief Destructor
49  inline
50  virtual
52  {}
53 
54 
55 protected: // Assignment
56 
57 
58  /// @brief Copy Assignment
59  inline
60  Observer &
61  operator =( Observer const & )
62  {
63  return *this;
64  }
65 
66 
67 public: // Subject Inspector
68 
69 
70  /// @brief Insert an Observer
71  virtual
72  void
73  insert_observer( Observer & ) const = 0;
74 
75 
76  /// @brief Remove an Observer
77  virtual
78  void
79  remove_observer( Observer & ) const = 0;
80 
81 
82  /// @brief Has At Least One Observer?
83  virtual
84  bool
85  has_observer() const = 0;
86 
87 
88  /// @brief Notify Observers That This Subject Has Changed
89  void
90  notify() const;
91 
92 
93  /// @brief Acyclic After Adding an Observer of This Subject?
94  bool
95  acyclic( Observer & ) const;
96 
97 
98 public: // Observer Modifier
99 
100 
101  /// @brief Update
102  virtual
103  void
104  update() = 0;
105 
106 
107  /// @brief Update for Destruction of a Subject
108  virtual
109  void
110  destructed( Subject const & ) = 0;
111 
112 
113 }; // Observer
114 
115 
116 } // namespace ObjexxFCL
117 
118 
119 #endif // INCLUDED_ObjexxFCL_Observer_HH
virtual ~Observer()
Destructor.
Definition: Observer.hh:51
virtual void update()=0
Update.
virtual void insert_observer(Observer &) const =0
Insert an Observer.
virtual void remove_observer(Observer &) const =0
Remove an Observer.
virtual void destructed(Subject const &)=0
Update for Destruction of a Subject.
Observer & operator=(Observer const &)
Copy Assignment.
Definition: Observer.hh:61
virtual bool has_observer() const =0
Has At Least One Observer?
void notify() const
Notify Observers That This Subject Has Changed.
Definition: Observer.cc:27
Observer: Combined Subject + Observer Abstract Base Class.
Definition: Observer.hh:26
Observer()
Default Constructor.
Definition: Observer.hh:35
bool acyclic(Observer &) const
Acyclic After Adding an Observer of This Subject?
Definition: Observer.cc:35
Observer(Observer const &)
Copy Constructor.
Definition: Observer.hh:41