1 #ifndef H_CAN_DISPATCHER 2 #define H_CAN_DISPATCHER 7 #include <unordered_map> 10 #include <boost/thread/mutex.hpp> 27 std::weak_ptr<DispatcherBase>
guard_;
43 for(
typename std::list<const Listener* >::const_iterator it=listeners_.begin(); it != listeners_.end(); ++it){
48 boost::mutex::scoped_lock lock(mutex_);
52 boost::mutex::scoped_lock lock(mutex_);
53 return listeners_.size();
58 dispatcher->listeners_.push_back(l.get());
67 boost::mutex::scoped_lock lock(mutex_);
71 boost::mutex::scoped_lock lock(mutex_);
72 dispatcher_->dispatch_nolock(obj);
75 return dispatcher_->numListeners();
82 std::unordered_map<K, typename BaseClass::DispatcherBaseSharedPtr, Hash>
filtered_;
84 using BaseClass::createListener;
86 boost::mutex::scoped_lock lock(BaseClass::mutex_);
88 if(!ptr) ptr.reset(
new typename BaseClass::DispatcherBase(BaseClass::mutex_));
89 return BaseClass::DispatcherBase::createListener(ptr, callable);
93 [[deprecated(
"provide key explicitly")]]
99 boost::mutex::scoped_lock lock(BaseClass::mutex_);
101 if(ptr) ptr->dispatch_nolock(obj);
102 BaseClass::dispatcher_->dispatch_nolock(obj);
105 [[deprecated(
"provide key explicitly")]]
107 return dispatch(static_cast<K>(obj), obj);
std::weak_ptr< DispatcherBase > guard_
virtual ~GuardedListener()
std::shared_ptr< const Listener > ListenerConstSharedPtr
std::shared_ptr< DispatcherBase > DispatcherBaseSharedPtr
std::unordered_map< K, typename BaseClass::DispatcherBaseSharedPtr, Hash > filtered_
DispatcherBase(const DispatcherBase &)=delete
void dispatch(const typename BaseClass::Type &obj)
void dispatch(const K &key, const typename BaseClass::Type &obj)
typename CommInterface::FrameListener ::ListenerConstSharedPtr ListenerConstSharedPtr
static ListenerConstSharedPtr createListener(DispatcherBaseSharedPtr dispatcher, const Callable &callable)
DispatcherBase(boost::mutex &mutex)
BaseClass::ListenerConstSharedPtr createListener(const T &key, const typename BaseClass::Callable &callable)
DispatcherBase & operator=(const DispatcherBase &)=delete
typename CommInterface::FrameListener ::Type Type
void dispatch(const Type &obj)
DispatcherBaseSharedPtr dispatcher_
typename CommInterface::FrameListener ::Callable Callable
void dispatch_nolock(const Type &obj) const
BaseClass::ListenerConstSharedPtr createListener(const K &key, const typename BaseClass::Callable &callable)
ListenerConstSharedPtr createListener(const Callable &callable)
GuardedListener(DispatcherBaseSharedPtr g, const Callable &callable)
std::list< const Listener *> listeners_