OpenDDS  Snapshot(2023/04/28-20:55)
TopicDetails.h
Go to the documentation of this file.
1 /*
2  * Distributed under the OpenDDS License.
3  * See: http://www.opendds.org/license.html
4  */
5 
6 #ifndef OPENDDS_DCPS_TOPICDETAILS_H
7 #define OPENDDS_DCPS_TOPICDETAILS_H
8 
9 #include "TopicCallbacks.h"
10 #include "GuidUtils.h"
11 #include "debug.h"
12 #include "Definitions.h"
13 #include "XTypes/TypeObject.h"
14 
15 #if !defined (ACE_LACKS_PRAGMA_ONCE)
16 #pragma once
17 #endif /* ACE_LACKS_PRAGMA_ONCE */
18 
20 
21 namespace OpenDDS {
22  namespace DCPS {
23 
24  struct TopicDetails {
25 
27  : topic_id_()
28  , has_dcps_key_(false)
29  , topic_callbacks_(0)
31  , assertion_count_(0)
32  {}
33 
34  void init(const OPENDDS_STRING& name,
35  const DCPS::GUID_t& topic_id) {
36  name_ = name;
38  }
39 
40  void set_local(const OPENDDS_STRING& data_type_name,
41  const DDS::TopicQos& qos,
42  bool has_dcps_key,
43  TopicCallbacks* topic_callbacks)
44  {
45  OPENDDS_ASSERT(topic_callbacks != 0);
46 
47  local_data_type_name_ = data_type_name;
48  local_qos_ = qos;
50  topic_callbacks_ = topic_callbacks;
52  }
53 
54  void unset_local()
55  {
56  if (--assertion_count_ == 0) {
59  topic_callbacks_ = 0;
60  }
61  }
62 
63  void update(const DDS::TopicQos& qos)
64  {
65  local_qos_ = qos;
66  }
67 
69  {
70  local_publications_.insert(guid);
71  }
72 
74  {
75  local_publications_.erase(guid);
76  }
77 
79  {
80  return local_publications_;
81  }
82 
84  {
85  local_subscriptions_.insert(guid);
86  }
87 
89  {
90  local_subscriptions_.erase(guid);
91  }
92 
94  {
95  return local_subscriptions_;
96  }
97 
99  {
100  discovered_publications_.insert(guid);
101  }
102 
104  {
105  discovered_publications_.erase(guid);
106  }
107 
109  {
111  }
112 
114  {
115  discovered_subscriptions_.insert(guid);
116  }
117 
119  {
120  discovered_subscriptions_.erase(guid);
121  }
122 
124  {
126  }
127 
129  {
132  }
133 
135  const DDS::TopicQos local_qos() const { return local_qos_; }
136  const DCPS::GUID_t& topic_id() const { return topic_id_; }
137  bool has_dcps_key() const { return has_dcps_key_; }
138  bool local_is_set() const { return topic_callbacks_; }
139 
140  bool is_dead() const
141  {
142  return topic_callbacks_ == 0 &&
143  local_publications_.empty() &&
144  local_subscriptions_.empty() &&
145  discovered_publications_.empty() &&
147  }
148 
149  private:
156 
163  };
164 
165  typedef OPENDDS_MAP(String, TopicDetails) TopicDetailsMap;
166  } // namespace DCPS
167 } // namespace OpenDDS
168 
170 
171 #endif /* OPENDDS_DCPS_TOPICDETAILS_H */
void remove_local_publication(const DCPS::GUID_t &guid)
Definition: TopicDetails.h:73
void remove_discovered_subscription(const DCPS::GUID_t &guid)
Definition: TopicDetails.h:118
virtual void inconsistent_topic(int count)=0
std::string String
void init(const OPENDDS_STRING &name, const DCPS::GUID_t &topic_id)
Definition: TopicDetails.h:34
const RepoIdSet & local_publications() const
Definition: TopicDetails.h:78
const RepoIdSet & discovered_subscriptions() const
Definition: TopicDetails.h:123
void remove_local_subscription(const DCPS::GUID_t &guid)
Definition: TopicDetails.h:88
GuidSet RepoIdSet
Definition: GuidUtils.h:113
const RepoIdSet & local_subscriptions() const
Definition: TopicDetails.h:93
#define OPENDDS_ASSERT(C)
Definition: Definitions.h:72
TopicCallbacks * topic_callbacks_
Definition: TopicDetails.h:155
void add_local_publication(const DCPS::GUID_t &guid)
Definition: TopicDetails.h:68
const DCPS::GUID_t & topic_id() const
Definition: TopicDetails.h:136
void update(const DDS::TopicQos &qos)
Definition: TopicDetails.h:63
#define OPENDDS_STRING
const DDS::TopicQos local_qos() const
Definition: TopicDetails.h:135
void add_discovered_subscription(const DCPS::GUID_t &guid)
Definition: TopicDetails.h:113
void set_local(const OPENDDS_STRING &data_type_name, const DDS::TopicQos &qos, bool has_dcps_key, TopicCallbacks *topic_callbacks)
Definition: TopicDetails.h:40
OPENDDS_STRING local_data_type_name_
Definition: TopicDetails.h:151
const RepoIdSet & discovered_publications() const
Definition: TopicDetails.h:108
const char *const name
Definition: debug.cpp:60
void add_discovered_publication(const DCPS::GUID_t &guid)
Definition: TopicDetails.h:98
void add_local_subscription(const DCPS::GUID_t &guid)
Definition: TopicDetails.h:83
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
void remove_discovered_publication(const DCPS::GUID_t &guid)
Definition: TopicDetails.h:103
const OPENDDS_STRING local_data_type_name() const
Definition: TopicDetails.h:134
Defines the interface for Discovery callbacks into the Topic.
The Internal API and Implementation of OpenDDS.
Definition: AddressCache.h:28
typedef OPENDDS_MAP(OPENDDS_STRING, OPENDDS_STRING) ValueMap
Helper types and functions for config file parsing.