OpenRTM-aist 2.0.2
Loading...
Searching...
No Matches
ListenerHolder.h
Go to the documentation of this file.
1// -*- C++ -*-
19#ifndef RTM_UTIL_LISTENERHOLDER_H
20#define RTM_UTIL_LISTENERHOLDER_H
21
22#include <mutex>
23
24#include <vector>
25#include <utility>
26
27namespace RTM
28{
29namespace util
30{
142 template <typename ListenerClass>
144 {
145 public:
146 using Entry = std::pair<ListenerClass*, bool>;
147 using EntryList = std::vector<Entry>;
148 using EntryIterator = typename EntryList::iterator;
151
159 ListenerHolder() = default;
160
169 {
170 std::lock_guard<std::mutex> guard(m_mutex);
171
172 for(auto & listener : m_listeners)
173 {
174 if (listener.second)
175 {
176 delete listener.first;
177 }
178 }
179 m_listeners.clear();
180 }
181
189 virtual void addListener(ListenerClass* listener,
190 bool autoclean)
191 {
192 std::lock_guard<std::mutex> guard(m_mutex);
193 m_listeners.emplace_back(listener, autoclean);
194 }
195
203 virtual void removeListener(ListenerClass* listener)
204 {
205 std::lock_guard<std::mutex> guard(m_mutex);
206 EntryIterator it(m_listeners.begin());
207
208 for (; it != m_listeners.end(); ++it)
209 {
210 if ((*it).first == listener)
211 {
212 if ((*it).second)
213 {
214 delete (*it).first;
215 }
216 m_listeners.erase(it);
217 return;
218 }
219 }
220 }
221
222 protected:
230 std::mutex m_mutex;
231
240 };
241} // namespace util
242} // namespace RTM
243
244#define LISTENERHOLDER_CALLBACK(func, args) \
245 do { \
246 std::lock_guard<std::mutex> guard(m_mutex); \
247 for (auto&& listener : m_listeners) \
248 { \
249 listener.first->func args; \
250 } \
251 } while(0)
252
253#endif // RTM_UITL_LISTENERHOLDER_H
Definition ListenerHolder.h:144
std::vector< Entry > EntryList
Definition ListenerHolder.h:147
virtual void removeListener(ListenerClass *listener)
remove listener object
Definition ListenerHolder.h:203
virtual void addListener(ListenerClass *listener, bool autoclean)
add listener object
Definition ListenerHolder.h:189
ListenerHolder(ListenerHolder const &)=delete
EntryList m_listeners
List of listener object .
Definition ListenerHolder.h:239
virtual ~ListenerHolder()
ListenerHolder class dtor .
Definition ListenerHolder.h:168
ListenerHolder & operator=(ListenerHolder const &)=delete
ListenerHolder()=default
ListenerHolder class ctor .
typename EntryList::iterator EntryIterator
Definition ListenerHolder.h:148
std::pair< ListenerClass *, bool > Entry
Definition ListenerHolder.h:146
std::mutex m_mutex
Mutex .
Definition ListenerHolder.h:230
RT-Middleware.
Definition FactoryInit.h:22