18 #ifndef GZ_TRANSPORT_TOPICSTORAGE_HH_
19 #define GZ_TRANSPORT_TOPICSTORAGE_HH_
26 #include "gz/transport/config.hh"
27 #include "gz/transport/Export.hh"
34 inline namespace GZ_TRANSPORT_VERSION_NAMESPACE {
54 if (this->data.find(_publisher.Topic()) == this->data.end())
57 this->data[_publisher.Topic()] =
62 auto &m = this->data[_publisher.Topic()];
63 if (m.find(_publisher.PUuid()) != m.end())
66 auto &v = m[_publisher.PUuid()];
70 return _pub.Addr() == _publisher.Addr() &&
71 _pub.NUuid() == _publisher.NUuid();
80 m[_publisher.PUuid()].push_back(T(_publisher));
89 return this->data.find(_topic) != this->data.end();
101 if (!this->HasTopic(_topic))
105 auto &m = this->data.at(_topic);
107 for (
auto const &procs : m)
110 auto &v = procs.second;
114 return _pub.MsgTypeName() == _type ||
115 _pub.MsgTypeName() == kGenericMessageType;
119 if (found != v.end())
135 if (!this->HasTopic(_topic))
138 return this->data.at(_topic).find(_pUuid) !=
139 this->data.at(_topic).end();
147 for (
auto const &topic : this->data)
149 for (
auto const &proc : topic.second)
151 for (
auto const &pub : proc.second)
153 if (pub.Addr() == _addr)
173 if (this->data.find(_topic) == this->data.end())
177 auto &m = this->data.at(_topic);
180 if (m.find(_pUuid) == m.end())
184 auto &v = m.at(_pUuid);
188 return _pub.NUuid() == _nUuid;
191 if (found != v.end())
208 if (!this->HasTopic(_topic))
211 _info = this->data.at(_topic);
227 if (this->data.find(_topic) != this->data.end())
230 auto &m = this->data[_topic];
233 if (m.find(_pUuid) != m.end())
237 auto priorSize = v.size();
241 return _pub.NUuid() == _nUuid;
244 counter = priorSize - v.size();
250 this->data.erase(_topic);
265 for (
auto it = this->data.begin(); it != this->data.end();)
268 auto &m = it->second;
269 counter += m.erase(_pUuid);
271 this->data.erase(it++);
290 for (
auto const &topic : this->data)
293 auto &m = topic.second;
294 if (m.find(_pUuid) != m.end())
296 auto &v = m.at(_pUuid);
297 for (
auto const &pub : v)
299 _pubs[pub.NUuid()].push_back(T(pub));
317 for (
auto const &topic : this->data)
320 auto const &m = topic.second;
321 if (m.find(_pUuid) != m.end())
323 auto const &v = m.at(_pUuid);
324 for (
auto const &pub : v)
326 if (pub.NUuid() == _nUuid)
339 for (
auto const &topic : this->data)
347 for (
auto const &topic : this->data)
350 auto &m = topic.second;
351 for (
auto const &proc : m)
354 auto &v = proc.second;
355 for (
auto const &publisher : v)