Main Page   Class Hierarchy   Data Structures   File List   Data Fields  

Subject.h

00001 
00002 #ifndef SUBJECT_H
00003 #define SUBJECT_H
00004 
00005 #include <list>
00006 #include "Observer.h"
00007 using namespace std;
00008 
00016 class Subject {
00017   public:
00018     virtual ~Subject();  
00019     virtual void attach(Observer *const);
00020     virtual void detach(Observer *const);
00021     virtual void detachAllObservers();
00022     virtual void notify() const;
00023   protected:
00024     Subject() {}
00025   private:
00026     std::list<Observer *> _observers;
00027 };
00028 
00029 
00030 
00031 //  Implementations of the methods that are not pure virtual.
00032 
00036 inline Subject::~Subject() {
00037   _observers.clear();
00038 }
00039 
00043 inline void Subject::attach(Observer *const o) {
00044   _observers.push_back(o);
00045 }
00046 
00050 inline void Subject::detach(Observer *const o) {
00051   _observers.remove(o);
00052 }
00053 
00057 inline void Subject::detachAllObservers() {
00058  _observers.clear();
00059 }
00060 
00064 inline void Subject::notify() const {
00065   for (std::list<Observer *>::const_iterator i = _observers.begin();
00066        i != _observers.end();
00067        ++i) {
00068     (*i)->update(this);
00069   }
00070 }
00071 
00072 #endif

Generated on Tue May 27 21:24:02 2003 for gstockcalc by doxygen1.3-rc3