00001 /* 00002 * Copyright (c) 2010 Ferruccio Vitale <unixo@devzero.it> 00003 * All rights reserved. 00004 * 00005 * $Id: Observable.h 75 2010-09-13 09:25:53Z unixo $ 00006 */ 00007 00008 #ifndef __OBSERVABLE_H__ 00009 #define __OBSERVABLE_H__ 00010 00011 #include "common.h" 00012 00013 using namespace std; 00014 00015 // Forward declaration 00016 class Observer; 00017 00026 class Observable 00027 { 00028 private: 00030 map<string, set<Observer *> > _observers; 00031 00032 protected: 00033 virtual void willChangeValueForKey(string aKey); 00034 virtual void didChangeValueForKey(string aKey); 00035 00036 public: 00037 Observable(); 00038 virtual ~Observable(); 00039 00040 virtual void addObserver(string aKey, Observer & o); 00041 virtual void removeObserver(string aKey, Observer & o); 00042 virtual void removeAllObservers(); 00043 virtual int countObservers(); 00044 }; 00045 00046 #endif /* __OBSERVABLE_H__ */