X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FDispatcher.hh;h=bbce87872e67e1afdcf0b0c21b19f9ff56a83fd3;hp=a152691a8184d170d62890df2fb72dbc51959dc2;hb=542e50a284c7f5b144a5c97c17f6d89b2af0175c;hpb=a5f0d391406a68275b41448fc3f49e8d8396c497 diff --git a/src/Moof/Dispatcher.hh b/src/Moof/Dispatcher.hh index a152691..bbce878 100644 --- a/src/Moof/Dispatcher.hh +++ b/src/Moof/Dispatcher.hh @@ -31,6 +31,7 @@ #include +#include #include #include @@ -45,7 +46,7 @@ namespace Mf { class Notification { public: - virtual ~Notification(); + virtual ~Notification() {}; }; @@ -55,7 +56,14 @@ public: class Dispatcher { + class Impl; + boost::shared_ptr impl_; + public: + + // TODO - the Handler would be even better as an object which automagically + // removes itself from the dispatcher on destruction, so users don't have to + // worry about forgetting typedef void* Handler; typedef boost::function Function; @@ -72,13 +80,36 @@ 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) +{ + return Dispatcher::getInstance().addHandler(message, callback); +} + +inline Dispatcher::Handler addHandler(const std::string& message, + const Dispatcher::Function& callback, Dispatcher::Handler id) +{ + return 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_