+ inline Handler addHandler(const std::string& message,
+ const Function& callback, Handler id)
+ {
+ callbacks.insert(std::make_pair(message, std::make_pair(id, callback)));
+ handlers.insert(std::make_pair(id, message));
+
+ return id;
+ }
+
+ inline void removeHandler(Handler id)
+ {
+ std::pair<HandlerIter,HandlerIter> matching(handlers.equal_range(id));
+
+ for (HandlerIter it = matching.first; it != matching.second; ++it)
+ {
+ CallbackIter first = callbacks.find((*it).second);
+ CallbackIter last = callbacks.end();
+
+ for (CallbackIter jt = first; jt != last; ++jt)
+ {
+ if (((*jt).second).first == id)
+ {
+ callbacks.erase(jt);
+ break;
+ }
+ }
+ }
+
+ handlers.erase(id);
+ }
+
+ unsigned long id;
+
+ CallbackLookup callbacks;
+ HandlerLookup handlers;