00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef IOBSERVER_H
00020 #define IOBSERVER_H
00021
00022
00023 #include "smbios/compat.h"
00024
00025 #include <list>
00026
00027
00028 #include "smbios/config/abi_prefix.hpp"
00029
00030 namespace observer
00031 {
00032
00033 class IObservable;
00034
00035 class IObserver
00036 {
00037 public:
00038 virtual ~IObserver();
00039 virtual void update( const IObservable *whatChanged, void *param = 0 ) = 0;
00040 protected:
00041 IObserver();
00042 };
00043
00044 class IObservable
00045 {
00046 public:
00047 virtual ~IObservable();
00048
00049 virtual void attach( IObserver * ) const;
00050 virtual void detach( IObserver * ) const;
00051 virtual void notify( void *param = 0 ) const;
00052 protected:
00053 IObservable();
00054
00055 private:
00056 mutable std::list<IObserver *> observers;
00057 };
00058
00059 }
00060
00061
00062 #include "smbios/config/abi_suffix.hpp"
00063
00064 #endif