DCPS_IR_Topic Class Reference

Representative of a Topic. More...

#include <DCPS_IR_Topic.h>

Inheritance diagram for DCPS_IR_Topic:
Inheritance graph
[legend]
Collaboration diagram for DCPS_IR_Topic:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 DCPS_IR_Topic (const OpenDDS::DCPS::RepoId &id, const DDS::TopicQos &qos, DCPS_IR_Domain *domain, DCPS_IR_Participant *creator, DCPS_IR_Topic_Description *description, bool isBIT)
 ~DCPS_IR_Topic ()
void release (bool removing)
int add_publication_reference (DCPS_IR_Publication *publication, bool associate=true)
int remove_publication_reference (DCPS_IR_Publication *publication)
int add_subscription_reference (DCPS_IR_Subscription *subscription, bool associate=true)
int remove_subscription_reference (DCPS_IR_Subscription *subscription)
void try_associate (DCPS_IR_Subscription *subscription)
void reevaluate_associations (DCPS_IR_Subscription *subscription)
OpenDDS::DCPS::RepoId get_id () const
OpenDDS::DCPS::RepoId get_participant_id () const
DCPS_IR_Topic_Descriptionget_topic_description ()
DDS::TopicQosget_topic_qos ()
bool set_topic_qos (const DDS::TopicQos &qos)
DDS::InstanceHandle_t get_handle ()
void set_handle (DDS::InstanceHandle_t handle)
CORBA::Boolean is_bit ()
void set_bit_status (CORBA::Boolean isBIT)
void reassociate_all_publications ()
std::string dump_to_string (const std::string &prefix, int depth) const

Private Attributes

OpenDDS::DCPS::RepoId id_
DDS::TopicQos qos_
DCPS_IR_Domaindomain_
DCPS_IR_Participantparticipant_
DCPS_IR_Topic_Descriptiondescription_
DDS::InstanceHandle_t handle_
CORBA::Boolean isBIT_
DCPS_IR_Publication_Set publicationRefs_
DCPS_IR_Subscription_Set subscriptionRefs_
bool removed_

Detailed Description

Representative of a Topic.

Definition at line 43 of file DCPS_IR_Topic.h.


Constructor & Destructor Documentation

DCPS_IR_Topic h OPENDDS_BEGIN_VERSIONED_NAMESPACE_DECL DCPS_IR_Topic::DCPS_IR_Topic ( const OpenDDS::DCPS::RepoId id,
const DDS::TopicQos qos,
DCPS_IR_Domain domain,
DCPS_IR_Participant creator,
DCPS_IR_Topic_Description description,
bool  isBIT 
)

Definition at line 25 of file DCPS_IR_Topic.cpp.

00031   : id_(id),
00032     qos_(qos),
00033     domain_(domain),
00034     participant_(creator),
00035     description_(description),
00036     handle_(0),
00037     isBIT_(isBIT),
00038     removed_(false)
00039 {
00040 }

DCPS_IR_Topic::~DCPS_IR_Topic (  ) 

Definition at line 42 of file DCPS_IR_Topic.cpp.

00043 {
00044 }


Member Function Documentation

int DCPS_IR_Topic::add_publication_reference ( DCPS_IR_Publication publication,
bool  associate = true 
)

Adds the publication to the list of publications Calls the topic description's try associate if successfully added 'associate' switch toggles association attempt. Returns 0 if added, 1 if already exists, -1 other failure

Definition at line 57 of file DCPS_IR_Topic.cpp.

References ACE_TEXT(), OpenDDS::DCPS::DCPS_debug_level, description_, domain_, DCPS_IR_Publication::get_id(), id_, ACE_Unbounded_Set_Ex< T, C >::insert(), LM_DEBUG, LM_ERROR, LM_WARNING, publicationRefs_, DCPS_IR_Domain::publish_publication_bit(), status, and DCPS_IR_Topic_Description::try_associate_publication().

Referenced by TAO_DDS_DCPSInfo_i::add_publication().

00059 {
00060   int status = publicationRefs_.insert(publication);
00061 
00062   switch (status) {
00063   case 0:
00064 
00065     // Publish the BIT information
00066     domain_->publish_publication_bit(publication);
00067 
00068     if (associate) {
00069       description_->try_associate_publication(publication);
00070       // Do not check incompatible qos here.  The check is done
00071       // in the DCPS_IR_Topic_Description::try_associate_publication method
00072     }
00073 
00074     if (OpenDDS::DCPS::DCPS_debug_level > 0) {
00075       OpenDDS::DCPS::RepoIdConverter topic_converter(id_);
00076       OpenDDS::DCPS::RepoIdConverter pub_converter(publication->get_id());
00077       ACE_DEBUG((LM_DEBUG,
00078                  ACE_TEXT("(%P|%t) DCPS_IR_Topic::add_publication_reference: ")
00079                  ACE_TEXT("topic %C added publication %C at %x\n"),
00080                  std::string(topic_converter).c_str(),
00081                  std::string(pub_converter).c_str(),
00082                  publication));
00083     }
00084 
00085     break;
00086 
00087   case 1:
00088 
00089     if (OpenDDS::DCPS::DCPS_debug_level > 0) {
00090       OpenDDS::DCPS::RepoIdConverter topic_converter(id_);
00091       OpenDDS::DCPS::RepoIdConverter pub_converter(publication->get_id());
00092       ACE_DEBUG((LM_WARNING,
00093                  ACE_TEXT("(%P|%t) WARNING: DCPS_IR_Topic::add_publication_reference: ")
00094                  ACE_TEXT("topic %C attempt to re-add publication %C.\n"),
00095                  std::string(topic_converter).c_str(),
00096                  std::string(pub_converter).c_str()));
00097     }
00098 
00099     break;
00100 
00101   case -1: {
00102     OpenDDS::DCPS::RepoIdConverter topic_converter(id_);
00103     OpenDDS::DCPS::RepoIdConverter pub_converter(publication->get_id());
00104     ACE_ERROR((LM_ERROR,
00105                ACE_TEXT("(%P|%t) ERROR: DCPS_IR_Topic::add_publication_reference: ")
00106                ACE_TEXT("topic %C failed to add publication %C\n"),
00107                std::string(topic_converter).c_str(),
00108                std::string(pub_converter).c_str()));
00109   }
00110   };
00111 
00112   return status;
00113 }

Here is the call graph for this function:

Here is the caller graph for this function:

int DCPS_IR_Topic::add_subscription_reference ( DCPS_IR_Subscription subscription,
bool  associate = true 
)

Adds the subscription to the list of subscriptions and let description handle the association. Returns 0 if added, 1 if already exists, -1 other failure

Definition at line 143 of file DCPS_IR_Topic.cpp.

References ACE_TEXT(), DCPS_IR_Topic_Description::add_subscription_reference(), OpenDDS::DCPS::DCPS_debug_level, description_, DCPS_IR_Subscription::get_id(), id_, ACE_Unbounded_Set_Ex< T, C >::insert(), LM_DEBUG, LM_ERROR, status, and subscriptionRefs_.

Referenced by TAO_DDS_DCPSInfo_i::add_subscription().

00145 {
00146   int status = subscriptionRefs_.insert(subscription);
00147 
00148   switch (status) {
00149   case 0:
00150 
00151     if (OpenDDS::DCPS::DCPS_debug_level > 0) {
00152       OpenDDS::DCPS::RepoIdConverter topic_converter(id_);
00153       OpenDDS::DCPS::RepoIdConverter sub_converter(subscription->get_id());
00154       ACE_DEBUG((LM_DEBUG,
00155                  ACE_TEXT("(%P|%t) DCPS_IR_Topic::add_subscription_reference: ")
00156                  ACE_TEXT("topic %C added subscription %C at %x.\n"),
00157                  std::string(topic_converter).c_str(),
00158                  std::string(sub_converter).c_str(),
00159                  subscription));
00160     }
00161 
00162     status = this->description_->add_subscription_reference(subscription, associate);
00163     break;
00164 
00165   case 1: {
00166     OpenDDS::DCPS::RepoIdConverter topic_converter(id_);
00167     OpenDDS::DCPS::RepoIdConverter sub_converter(subscription->get_id());
00168     ACE_ERROR((LM_ERROR,
00169                ACE_TEXT("(%P|%t) ERROR: DCPS_IR_Topic::add_subscription_reference: ")
00170                ACE_TEXT("topic %C attempt to re-add subscription %C.\n"),
00171                std::string(topic_converter).c_str(),
00172                std::string(sub_converter).c_str()));
00173   }
00174   break;
00175 
00176   case -1: {
00177     OpenDDS::DCPS::RepoIdConverter topic_converter(id_);
00178     OpenDDS::DCPS::RepoIdConverter sub_converter(subscription->get_id());
00179     ACE_ERROR((LM_ERROR,
00180                ACE_TEXT("(%P|%t) ERROR: DCPS_IR_Topic::add_subscription_reference: ")
00181                ACE_TEXT("topic %C failed to add subscription %C.\n"),
00182                std::string(topic_converter).c_str(),
00183                std::string(sub_converter).c_str()));
00184   }
00185   };
00186 
00187   return status;
00188 }

Here is the call graph for this function:

Here is the caller graph for this function:

std::string DCPS_IR_Topic::dump_to_string ( const std::string &  prefix,
int  depth 
) const

Definition at line 375 of file DCPS_IR_Topic.cpp.

References ACE_Unbounded_Set_Ex< T, C >::begin(), ACE_Unbounded_Set_Ex< T, C >::end(), id_, isBIT_, publicationRefs_, str, and subscriptionRefs_.

00376 {
00377   std::string str;
00378 #if !defined (OPENDDS_INFOREPO_REDUCED_FOOTPRINT)
00379   OpenDDS::DCPS::RepoIdConverter local_converter(id_);
00380 
00381   for (int i=0; i < depth; i++)
00382     str += prefix;
00383   std::string indent = str + prefix;
00384   str += "DCPS_IR_Topic[";
00385   str += std::string(local_converter);
00386   str += "]";
00387   if (isBIT_)
00388     str += " (BIT)";
00389   str += "\n";
00390 
00391   str += indent + "Publications:\n";
00392   for (DCPS_IR_Publication_Set::const_iterator pub = publicationRefs_.begin();
00393        pub != publicationRefs_.end();
00394        pub++)
00395   {
00396     OpenDDS::DCPS::RepoIdConverter pub_converter((*pub)->get_id());
00397     str += indent + std::string(pub_converter);
00398     str += "\n";
00399 
00400   }
00401 
00402   str += indent + "Subscriptions:\n";
00403   for (DCPS_IR_Subscription_Set::const_iterator sub = subscriptionRefs_.begin();
00404        sub != subscriptionRefs_.end();
00405        sub++)
00406   {
00407     OpenDDS::DCPS::RepoIdConverter sub_converter((*sub)->get_id());
00408     str += indent + std::string(sub_converter);
00409     str += "\n";
00410   }
00411 #endif // !defined (OPENDDS_INFOREPO_REDUCED_FOOTPRINT)
00412   return str;
00413 }

Here is the call graph for this function:

DDS::InstanceHandle_t DCPS_IR_Topic::get_handle ( void   ) 

Definition at line 327 of file DCPS_IR_Topic.cpp.

References handle_.

Referenced by DCPS_IR_Domain::dispose_topic_bit().

00328 {
00329   return handle_;
00330 }

Here is the caller graph for this function:

OpenDDS::DCPS::RepoId DCPS_IR_Topic::get_id ( void   )  const
OpenDDS::DCPS::RepoId DCPS_IR_Topic::get_participant_id (  )  const

Definition at line 225 of file DCPS_IR_Topic.cpp.

References DCPS_IR_Participant::get_id(), and participant_.

00226 {
00227   return participant_->get_id();
00228 }

Here is the call graph for this function:

DCPS_IR_Topic_Description * DCPS_IR_Topic::get_topic_description (  ) 
DDS::TopicQos * DCPS_IR_Topic::get_topic_qos (  ) 

Return pointer to the Topic qos Topic retains ownership

Definition at line 230 of file DCPS_IR_Topic.cpp.

References qos_.

Referenced by TAO_DDS_DCPSInfo_i::find_topic(), DCPS_IR_Domain::publish_publication_bit(), DCPS_IR_Domain::publish_subscription_bit(), and DCPS_IR_Domain::publish_topic_bit().

00231 {
00232   return &qos_;
00233 }

Here is the caller graph for this function:

CORBA::Boolean DCPS_IR_Topic::is_bit (  ) 

Definition at line 337 of file DCPS_IR_Topic.cpp.

References isBIT_.

Referenced by DCPS_IR_Domain::dispose_topic_bit().

00338 {
00339   return isBIT_;
00340 }

Here is the caller graph for this function:

void DCPS_IR_Topic::reassociate_all_publications (  ) 

Try to associate all the current publications. This is used to reconnect Built in Topics after a persistent restart.

Definition at line 363 of file DCPS_IR_Topic.cpp.

References ACE_Unbounded_Set_Ex< T, C >::begin(), description_, ACE_Unbounded_Set_Ex< T, C >::end(), publicationRefs_, and DCPS_IR_Topic_Description::try_associate_publication().

00364 {
00365   DCPS_IR_Publication_Set::ITERATOR iter = publicationRefs_.begin();
00366   DCPS_IR_Publication_Set::ITERATOR end = publicationRefs_.end();
00367 
00368   for ( ; iter != end; ++iter)
00369   {
00370     description_->try_associate_publication(*iter);
00371   }
00372 }

Here is the call graph for this function:

void DCPS_IR_Topic::reevaluate_associations ( DCPS_IR_Subscription subscription  ) 

Called by the DCPS_IR_Topic_Description to re-evaluate the association between the publications of this topic and the provided subscription.

Definition at line 347 of file DCPS_IR_Topic.cpp.

References ACE_Unbounded_Set_Ex< T, C >::begin(), ACE_Unbounded_Set_Ex< T, C >::end(), publicationRefs_, DCPS_IR_Publication::reevaluate_association(), and DCPS_IR_Subscription::reevaluate_association().

Referenced by DCPS_IR_Topic_Description::reevaluate_associations().

00348 {
00349   DCPS_IR_Publication * pub = 0;
00350   DCPS_IR_Publication_Set::ITERATOR iter = publicationRefs_.begin();
00351   DCPS_IR_Publication_Set::ITERATOR end = publicationRefs_.end();
00352 
00353   while (iter != end) {
00354     pub = *iter;
00355     ++iter;
00356 
00357     subscription->reevaluate_association(pub);
00358     pub->reevaluate_association(subscription);
00359   }
00360 }

Here is the call graph for this function:

Here is the caller graph for this function:

void DCPS_IR_Topic::release ( bool  removing  ) 

Delete the topic object upon last topic associated sub/pub and topic object deletion. It's kind of reference counting. The removing true indicates it's called upon delete_topic, otherwise it's upon remove_publication/remove_subcription.

Definition at line 46 of file DCPS_IR_Topic.cpp.

References domain_, id_, publicationRefs_, DCPS_IR_Domain::remove_topic_id_mapping(), removed_, ACE_Unbounded_Set_Ex< T, C >::size(), and subscriptionRefs_.

Referenced by DCPS_IR_Participant::remove_all_dependents(), DCPS_IR_Participant::remove_publication(), DCPS_IR_Participant::remove_subscription(), and DCPS_IR_Domain::remove_topic().

00047 {
00048   if (removing || this->removed_) {
00049     this->removed_ = true;
00050 
00051     if (publicationRefs_.size() == 0 && subscriptionRefs_.size() == 0) {
00052       this->domain_->remove_topic_id_mapping(this->id_);
00053     }
00054   }
00055 }

Here is the call graph for this function:

Here is the caller graph for this function:

int DCPS_IR_Topic::remove_publication_reference ( DCPS_IR_Publication publication  ) 

Removes the publication from the list of publications Returns 0 if successful

Definition at line 115 of file DCPS_IR_Topic.cpp.

References ACE_TEXT(), OpenDDS::DCPS::DCPS_debug_level, DCPS_IR_Publication::get_id(), id_, LM_DEBUG, LM_ERROR, publicationRefs_, ACE_Unbounded_Set_Ex< T, C >::remove(), and status.

Referenced by DCPS_IR_Participant::remove_all_dependents(), and DCPS_IR_Participant::remove_publication().

00116 {
00117   int status = publicationRefs_.remove(publication);
00118 
00119   if (0 == status) {
00120     if (OpenDDS::DCPS::DCPS_debug_level > 0) {
00121       OpenDDS::DCPS::RepoIdConverter topic_converter(id_);
00122       OpenDDS::DCPS::RepoIdConverter pub_converter(publication->get_id());
00123       ACE_DEBUG((LM_DEBUG,
00124                  ACE_TEXT("(%P|%t) DCPS_IR_Topic::remove_publication_reference: ")
00125                  ACE_TEXT("topic %C removed publication %C.\n"),
00126                  std::string(topic_converter).c_str(),
00127                  std::string(pub_converter).c_str()));
00128     }
00129 
00130   } else {
00131     OpenDDS::DCPS::RepoIdConverter topic_converter(id_);
00132     OpenDDS::DCPS::RepoIdConverter pub_converter(publication->get_id());
00133     ACE_ERROR((LM_ERROR,
00134                ACE_TEXT("(%P|%t) ERROR: DCPS_IR_Topic::remove_publication_reference: ")
00135                ACE_TEXT("topic %C failed to remove publication %C.\n"),
00136                std::string(topic_converter).c_str(),
00137                std::string(pub_converter).c_str()));
00138   }
00139 
00140   return status;
00141 }

Here is the call graph for this function:

Here is the caller graph for this function:

int DCPS_IR_Topic::remove_subscription_reference ( DCPS_IR_Subscription subscription  ) 

Removes the subscription from the list of subscriptions Returns 0 if successful

Definition at line 190 of file DCPS_IR_Topic.cpp.

References ACE_TEXT(), OpenDDS::DCPS::DCPS_debug_level, description_, DCPS_IR_Subscription::get_id(), id_, LM_DEBUG, LM_ERROR, ACE_Unbounded_Set_Ex< T, C >::remove(), DCPS_IR_Topic_Description::remove_subscription_reference(), status, and subscriptionRefs_.

Referenced by DCPS_IR_Participant::remove_all_dependents(), and DCPS_IR_Participant::remove_subscription().

00191 {
00192   int status = subscriptionRefs_.remove(subscription);
00193 
00194   if (0 == status) {
00195     if (OpenDDS::DCPS::DCPS_debug_level > 0) {
00196       OpenDDS::DCPS::RepoIdConverter topic_converter(id_);
00197       OpenDDS::DCPS::RepoIdConverter sub_converter(subscription->get_id());
00198       ACE_DEBUG((LM_DEBUG,
00199                  ACE_TEXT("(%P|%t) DCPS_IR_Topic::remove_subscription_reference: ")
00200                  ACE_TEXT("topic %C removed subscription %C.\n"),
00201                  std::string(topic_converter).c_str(),
00202                  std::string(sub_converter).c_str()));
00203     }
00204 
00205     this->description_->remove_subscription_reference(subscription);
00206 
00207   } else {
00208     OpenDDS::DCPS::RepoIdConverter topic_converter(id_);
00209     OpenDDS::DCPS::RepoIdConverter sub_converter(subscription->get_id());
00210     ACE_ERROR((LM_ERROR,
00211                ACE_TEXT("(%P|%t) ERROR: DCPS_IR_Topic::remove_subscription_reference: ")
00212                ACE_TEXT("topic %C failed to remove subscription %C.\n"),
00213                std::string(topic_converter).c_str(),
00214                std::string(sub_converter).c_str()));
00215   } // if (0 == status)
00216 
00217   return status;
00218 }

Here is the call graph for this function:

Here is the caller graph for this function:

void DCPS_IR_Topic::set_bit_status ( CORBA::Boolean  isBIT  ) 

Definition at line 342 of file DCPS_IR_Topic.cpp.

References isBIT_.

Referenced by DCPS_IR_Participant::add_topic_reference(), and DCPS_IR_Domain::publish_topic_bit().

00343 {
00344   isBIT_ = isBIT;
00345 }

Here is the caller graph for this function:

void DCPS_IR_Topic::set_handle ( DDS::InstanceHandle_t  handle  ) 

Definition at line 332 of file DCPS_IR_Topic.cpp.

References handle_.

Referenced by DCPS_IR_Domain::publish_topic_bit().

00333 {
00334   handle_ = handle;
00335 }

Here is the caller graph for this function:

bool DCPS_IR_Topic::set_topic_qos ( const DDS::TopicQos qos  ) 

Reset topic qos and also propagate the qos change to related BITs that has the qos copy. Return false if the provided QoS makes the DataWriter and DataReader QoS incompatible. Currently supported changeable QoS in TopicQos do not affect.

Definition at line 235 of file DCPS_IR_Topic.cpp.

References ACE_Unbounded_Set_Ex< T, C >::begin(), domain_, ACE_Unbounded_Set_Ex< T, C >::end(), publicationRefs_, DCPS_IR_Domain::publish_publication_bit(), DCPS_IR_Domain::publish_subscription_bit(), DCPS_IR_Domain::publish_topic_bit(), qos_, subscriptionRefs_, and DDS::TopicQos::topic_data.

Referenced by TAO_DDS_DCPSInfo_i::update_topic_qos().

00236 {
00237   // Do not need re-evaluate compatibility and associations when
00238   // TopicQos changes since only datareader and datawriter QoS
00239   // are evaludated during normal associations establishment.
00240   using OpenDDS::DCPS::operator==;
00241   bool pub_to_rd_wr = !(qos.topic_data == qos_.topic_data);
00242 
00243   qos_ = qos;
00244   domain_->publish_topic_bit(this);
00245 
00246   if (!pub_to_rd_wr)
00247     return true;
00248 
00249   // The only changeable TopicQos used by DataWriter and DataReader
00250   // is topic_data so we need publish it to DW/DR BIT to make they
00251   // are consistent.
00252 
00253   // Update qos in datawriter BIT for associated datawriters.
00254 
00255   {
00256     DCPS_IR_Publication_Set::ITERATOR iter = publicationRefs_.begin();
00257     DCPS_IR_Publication_Set::ITERATOR end = publicationRefs_.end();
00258 
00259     while (iter != end) {
00260       domain_->publish_publication_bit(*iter);
00261       ++iter;
00262     }
00263   }
00264 
00265   // Update qos in datareader BIT for associated datareader.
00266 
00267   {
00268     DCPS_IR_Subscription_Set::ITERATOR iter = subscriptionRefs_.begin();
00269     DCPS_IR_Subscription_Set::ITERATOR end = subscriptionRefs_.end();
00270 
00271     while (iter != end) {
00272       domain_->publish_subscription_bit(*iter);
00273       ++iter;
00274     }
00275   }
00276 
00277   return true;
00278 }

Here is the call graph for this function:

Here is the caller graph for this function:

void DCPS_IR_Topic::try_associate ( DCPS_IR_Subscription subscription  ) 

Called by the DCPS_IR_Topic_Description Find any compatible publications and associate them using the DCPS_IR_Topic_Description's associate method. This method does not check the subscription's incompatible qos status.

Definition at line 280 of file DCPS_IR_Topic.cpp.

References ACE_TEXT(), ACE_Unbounded_Set_Ex< T, C >::begin(), OpenDDS::DCPS::IncompatibleQosStatus::count_since_last_send, OpenDDS::DCPS::DCPS_debug_level, description_, ACE_Unbounded_Set_Ex< T, C >::end(), DCPS_IR_Subscription::get_id(), DCPS_IR_Publication::get_incompatibleQosStatus(), DCPS_IR_Subscription::get_participant_id(), DCPS_IR_Subscription::get_topic_id(), id_, DCPS_IR_Participant::is_participant_ignored(), DCPS_IR_Participant::is_subscription_ignored(), DCPS_IR_Participant::is_topic_ignored(), LM_DEBUG, participant_, publicationRefs_, DCPS_IR_Topic_Description::try_associate(), and DCPS_IR_Publication::update_incompatible_qos().

Referenced by DCPS_IR_Topic_Description::try_associate_subscription().

00281 {
00282   // check if we should ignore this subscription
00283   if (participant_->is_subscription_ignored(subscription->get_id()) ||
00284       participant_->is_participant_ignored(subscription->get_participant_id()) ||
00285       participant_->is_topic_ignored(subscription->get_topic_id())) {
00286     if (OpenDDS::DCPS::DCPS_debug_level > 0) {
00287       OpenDDS::DCPS::RepoIdConverter topic_converter(id_);
00288       OpenDDS::DCPS::RepoIdConverter sub_converter(subscription->get_id());
00289       ACE_DEBUG((LM_DEBUG,
00290                  ACE_TEXT("(%P|%t) DCPS_IR_Topic::try_associate: ")
00291                  ACE_TEXT("topic %C ignoring subscription %C.\n"),
00292                  std::string(topic_converter).c_str(),
00293                  std::string(sub_converter).c_str()));
00294     }
00295 
00296   } else {
00297     // check all publications for compatibility
00298     DCPS_IR_Publication* pub = 0;
00299     OpenDDS::DCPS::IncompatibleQosStatus* qosStatus = 0;
00300 
00301     DCPS_IR_Publication_Set::ITERATOR iter = publicationRefs_.begin();
00302     DCPS_IR_Publication_Set::ITERATOR end = publicationRefs_.end();
00303 
00304     while (iter != end) {
00305       pub = *iter;
00306       ++iter;
00307       description_->try_associate(pub, subscription);
00308       // Check the publications QOS status
00309       qosStatus = pub->get_incompatibleQosStatus();
00310 
00311       if (0 < qosStatus->count_since_last_send) {
00312         pub->update_incompatible_qos();
00313       }
00314     } /* while (iter != end) */
00315 
00316     // The subscription QOS is not checked because
00317     // we don't know if the subscription is finished cycling
00318     // through topics.
00319   }
00320 }

Here is the call graph for this function:

Here is the caller graph for this function:


Member Data Documentation

Definition at line 129 of file DCPS_IR_Topic.h.

Referenced by add_publication_reference(), release(), and set_topic_qos().

Definition at line 132 of file DCPS_IR_Topic.h.

Referenced by get_handle(), and set_handle().

Definition at line 133 of file DCPS_IR_Topic.h.

Referenced by dump_to_string(), is_bit(), and set_bit_status().

Definition at line 130 of file DCPS_IR_Topic.h.

Referenced by get_participant_id(), and try_associate().

Definition at line 128 of file DCPS_IR_Topic.h.

Referenced by get_topic_qos(), and set_topic_qos().

bool DCPS_IR_Topic::removed_ [private]

True means release() is called upon delete_topic, but topic object is not deleted because there are still pub/sub associated.

Definition at line 142 of file DCPS_IR_Topic.h.

Referenced by release().

Keep track the subscriptions of this topic so the TopicQos change can be published for those subscriptions.

Definition at line 138 of file DCPS_IR_Topic.h.

Referenced by add_subscription_reference(), dump_to_string(), release(), remove_subscription_reference(), and set_topic_qos().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 10 Aug 2018 for OpenDDS by  doxygen 1.6.1