17 #ifndef _TOPICMANAGER_HH_ 
   18 #define _TOPICMANAGER_HH_ 
   20 #include <boost/bind.hpp> 
   25 #include <boost/unordered/unordered_set.hpp> 
  102       public: 
template<
typename M>
 
  104                                      unsigned int _queueLimit,
 
  107                 google::protobuf::Message *msg = 
NULL;
 
  109                 msg = 
dynamic_cast<google::protobuf::Message *
>(&msgtype);
 
  111                   gzthrow(
"Advertise requires a google protobuf type");
 
  116                       msg->GetTypeName(), _queueLimit, _hzRate));
 
  118                 std::string msgTypename;
 
  122                 msgTypename = msg->GetTypeName();
 
  125                 GZ_ASSERT(publication != 
NULL, 
"FindPublication returned NULL");
 
  127                 publication->AddPublisher(pub);
 
  128                 if (!publication->GetLocallyAdvertised())
 
  133                 publication->SetLocallyAdvertised(
true);
 
  134                 pub->SetPublication(publication);
 
  137                 SubNodeMap::iterator iter2;
 
  138                 SubNodeMap::iterator stEnd2 = this->subscribedNodes.end();
 
  139                 for (iter2 = this->subscribedNodes.begin();
 
  140                      iter2 != stEnd2; ++iter2)
 
  142                   if (iter2->first == _topic)
 
  144                     std::list<NodePtr>::iterator liter;
 
  145                     std::list<NodePtr>::iterator lEnd = iter2->second.end();
 
  146                     for (liter = iter2->second.begin();
 
  147                         liter != lEnd; ++liter)
 
  149                       publication->AddSubscription(*liter);
 
  159       public: 
void Unadvertise(
const std::string &_topic);
 
  168                   boost::function<
void(uint32_t)> _cb, uint32_t _id);
 
  185                                          const std::string &_host,
 
  193                                          const std::string &_host,
 
  206                                                 const std::string &_msgType);
 
  228       typedef std::map<std::string, std::list<NodePtr> > 
SubNodeMap;
 
  230       private: 
typedef std::map<std::string, PublicationPtr> PublicationPtr_M;
 
  231       private: PublicationPtr_M advertisedTopics;
 
  232       private: PublicationPtr_M::iterator advertisedTopicsEnd;
 
  234       private: std::vector<NodePtr> nodes;
 
  237       private: boost::unordered_set<NodePtr> nodesToProcess;
 
  239       private: boost::recursive_mutex nodeMutex;
 
  242       private: boost::mutex subscriberMutex;
 
  245       private: boost::mutex processNodesMutex;
 
  247       private: 
bool pauseIncoming;