12 #ifndef ECL_SIGSLOTS_TOPIC_HPP_ 
   13 #define ECL_SIGSLOTS_TOPIC_HPP_ 
   33 template <
typename Data>
 
   44 template <
typename Data>
 
   50         typedef std::set<SigSlot<Data>*> Subscribers;  
 
   56         Topic(
const std::string& name) : topic_name(name) {}
 
   62         const Subscribers* subscribers()
 const { 
return &topic_subscribers; }
 
   68         void addSubscriber(SigSlot<Data>* sigslot) {
 
   69                 topic_subscribers.insert(sigslot);
 
   76                 topic_publishers.insert(sigslot);
 
   87                 typename std::set<SigSlot<Data>*>::const_iterator iter = topic_publishers.find(sigslot);
 
   88                 if ( iter != topic_publishers.end() ) {
 
   89                         topic_publishers.erase(iter);
 
   91                 iter = topic_subscribers.find(sigslot);
 
   92                 if ( iter != topic_subscribers.end() ) {
 
   93                         topic_subscribers.erase(iter);
 
  103                 return ( ( topic_publishers.size() == 0 ) && ( topic_subscribers.size() == 0 ) );
 
  115     template <
typename OutputStream, 
typename TopicData>
 
  116     friend OutputStream& 
operator<<(OutputStream &ostream , 
const Topic<TopicData>& topic);
 
  119     std::string topic_name;
 
  120     std::set<SigSlot<Data>*> topic_publishers;
 
  121     std::set<SigSlot<Data>*> topic_subscribers;
 
  129 template <
typename OutputStream, 
typename TopicData>
 
  132         ostream << 
"  Name: " << topic.
topic_name << 
"\n";