X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FDispatcher.hh;h=da82f3824256b70bf50ee283f446133594a1c009;hp=5747f8581ddbc3622eed9be8ce5c3f0eebd03293;hb=f72400af4fa3e7b54dab154b5a2b6503a6f9af18;hpb=4701bf580b75a7d77a460c6f14f9fc31fb109bbb diff --git a/src/Moof/Dispatcher.hh b/src/Moof/Dispatcher.hh index 5747f85..da82f38 100644 --- a/src/Moof/Dispatcher.hh +++ b/src/Moof/Dispatcher.hh @@ -31,10 +31,8 @@ #include -#include #include - -#include +#include namespace Mf { @@ -55,13 +53,21 @@ public: * Dispatcher of notifications to interested parties. */ -class Dispatcher : public Singleton +class Dispatcher { + class Impl; + boost::shared_ptr impl_; + public: + typedef void* Handler; typedef boost::function Function; Dispatcher(); + ~Dispatcher(); + + // get global instance + static Dispatcher& getInstance(); Handler addHandler(const std::string& message, const Function& callback); Handler addHandler(const std::string& message, const Function& callback, @@ -70,13 +76,35 @@ public: void removeHandler(Handler id); void dispatch(const std::string& message, const Notification* param = 0); - -private: - class Impl; - boost::shared_ptr impl_; }; +namespace dispatcher { + +inline Dispatcher::Handler addHandler(const std::string& message, + const Dispatcher::Function& callback) +{ + Dispatcher::getInstance().addHandler(message, callback); +} + +inline Dispatcher::Handler addHandler(const std::string& message, + const Dispatcher::Function& callback, Dispatcher::Handler id) +{ + Dispatcher::getInstance().addHandler(message, callback, id); +} + +inline void removeHandler(Dispatcher::Handler id) +{ + Dispatcher::getInstance().removeHandler(id); +} + +inline void dispatch(const std::string& message, const Notification* param = 0) +{ + Dispatcher::getInstance().dispatch(message, param); +} + +} // namespace dispatch + } // namespace Mf #endif // _MOOF_DISPATCHER_HH_