Go to the documentation of this file.00001
00020 #include <rtm/ConnectorListener.h>
00021
00022 namespace RTC
00023 {
00031 ConnectorDataListener::~ConnectorDataListener(){}
00032
00040 ConnectorListener::~ConnectorListener(){}
00041
00049 ConnectorDataListenerHolder::ConnectorDataListenerHolder()
00050 {
00051 }
00052
00053
00054 ConnectorDataListenerHolder::~ConnectorDataListenerHolder()
00055 {
00056 Guard guard(m_mutex);
00057 for (int i(0), len(m_listeners.size()); i < len; ++i)
00058 {
00059 if (m_listeners[i].second)
00060 {
00061 delete m_listeners[i].first;
00062 }
00063 }
00064 }
00065
00066
00067 void ConnectorDataListenerHolder::
00068 addListener(ConnectorDataListener* listener, bool autoclean)
00069 {
00070 Guard guard(m_mutex);
00071 m_listeners.push_back(Entry(listener, autoclean));
00072 }
00073
00074
00075 void ConnectorDataListenerHolder::
00076 removeListener(ConnectorDataListener* listener)
00077 {
00078 Guard guard(m_mutex);
00079 std::vector<Entry>::iterator it(m_listeners.begin());
00080 for (; it != m_listeners.end(); ++it)
00081 {
00082 if ((*it).first == listener)
00083 {
00084 if ((*it).second)
00085 {
00086 delete (*it).first;
00087 }
00088 m_listeners.erase(it);
00089 return;
00090 }
00091 }
00092
00093 }
00094
00095
00096 void ConnectorDataListenerHolder::notify(const ConnectorInfo& info,
00097 const cdrMemoryStream& cdrdata)
00098 {
00099 Guard guard(m_mutex);
00100 for (int i(0), len(m_listeners.size()); i < len; ++i)
00101 {
00102 m_listeners[i].first->operator()(info, cdrdata);
00103 }
00104 }
00105
00106
00114 ConnectorListenerHolder::ConnectorListenerHolder()
00115 {
00116 }
00117
00118
00119 ConnectorListenerHolder::~ConnectorListenerHolder()
00120 {
00121 Guard guard(m_mutex);
00122 for (int i(0), len(m_listeners.size()); i < len; ++i)
00123 {
00124 if (m_listeners[i].second)
00125 {
00126 delete m_listeners[i].first;
00127 }
00128 }
00129 }
00130
00131
00132 void ConnectorListenerHolder::addListener(ConnectorListener* listener,
00133 bool autoclean)
00134 {
00135 Guard guard(m_mutex);
00136 m_listeners.push_back(Entry(listener, autoclean));
00137 }
00138
00139
00140 void ConnectorListenerHolder::removeListener(ConnectorListener* listener)
00141 {
00142 Guard guard(m_mutex);
00143 std::vector<Entry>::iterator it(m_listeners.begin());
00144
00145 for (; it != m_listeners.end(); ++it)
00146 {
00147 if ((*it).first == listener)
00148 {
00149 if ((*it).second)
00150 {
00151 delete (*it).first;
00152 }
00153 m_listeners.erase(it);
00154 return;
00155 }
00156 }
00157
00158 }
00159
00160
00161 void ConnectorListenerHolder::notify(const ConnectorInfo& info)
00162 {
00163 Guard guard(m_mutex);
00164 for (int i(0), len(m_listeners.size()); i < len; ++i)
00165 {
00166 m_listeners[i].first->operator()(info);
00167 }
00168 }
00169 };
00170
00171