#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/shared_ptr.hpp>
+#include <boost/weak_ptr.hpp>
namespace Mf {
class Impl;
boost::shared_ptr<Impl> mImpl;
- void removeHandler(unsigned id);
+ void removeTarget(unsigned id);
public:
};
- class Handler
+ class Handle
{
public:
- Handler() :
- mDispatch(0),
+ Handle() :
mId(0) {}
- Handler(Impl* dispatch, unsigned id) :
+ Handle(boost::weak_ptr<Impl> dispatch, unsigned id) :
mDispatch(dispatch),
mId(id) {}
- Handler(const Handler& handler) :
- mDispatch(handler.mDispatch),
- mId(handler.mId)
+ Handle(const Handle& handle) :
+ mDispatch(handle.mDispatch),
+ mId(handle.mId)
{
- handler.mId = 0;
+ handle.mId = 0;
}
- ~Handler();
+ ~Handle()
+ {
+ clear();
+ }
- Handler& operator = (const Handler& handler)
+ Handle& operator = (const Handle& handle)
{
- mDispatch = handler.mDispatch;
- mId = handler.mId;
- handler.mId = 0;
+ clear();
+ mDispatch = handle.mDispatch;
+ mId = handle.mId;
+ handle.mId = 0;
return *this;
}
{
return mId;
}
+
+ void clear();
private:
- Impl* mDispatch;
- mutable unsigned mId;
-
+ boost::weak_ptr<Impl> mDispatch;
+ mutable unsigned mId;
};
typedef boost::function<void(const Message*)> Function;
Dispatch();
- Handler addHandler(const std::string& event, const Function& callback);
- Handler addHandler(const std::string& event, const Function& callback,
- Handler handler);
+ Handle addTarget(const std::string& event, const Function& callback);
+ Handle addTarget(const std::string& event, const Function& callback,
+ Handle handle);
void dispatch(const std::string& event, const Message* message = 0);
+
+ static Dispatch& global();
};