00001 /* 00002 * Copyright (c) 2010 Ferruccio Vitale <unixo@devzero.it> 00003 * All rights reserved. 00004 * 00005 * $Id: Observable.h 72 2010-08-03 16:43:52Z 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 virtual ~Observable() {} 00038 00039 virtual void addObserver(string aKey, Observer & o); 00040 virtual void removeObserver(string aKey, Observer & o); 00041 virtual void removeAllObservers(); 00042 virtual int countObservers(); 00043 }; 00044 00045 #endif /* __OBSERVABLE_H__ */