2727 *
2828 */
2929
30+ #include < assert.h>
3031#include " metadata.h"
3132#include " error.h"
3233
@@ -110,12 +111,31 @@ uint16_t BrokerMetadata::get_port() const {
110111
111112// Metadata
112113
113- Metadata::Metadata (const rd_kafka_metadata_t * ptr)
114- : handle_(ptr, &rd_kafka_metadata_destroy) {
114+ void dummy_metadata_destroyer (const rd_kafka_metadata_t *) {
115+
116+ }
117+
118+ Metadata Metadata::make_non_owning (const rd_kafka_metadata_t * handle) {
119+ return Metadata (handle, NonOwningTag{});
120+ }
121+
122+ Metadata::Metadata ()
123+ : handle_(nullptr , nullptr ) {
124+
125+ }
126+
127+ Metadata::Metadata (const rd_kafka_metadata_t * handle)
128+ : handle_(handle, &rd_kafka_metadata_destroy) {
129+
130+ }
131+
132+ Metadata::Metadata (const rd_kafka_metadata_t * handle, NonOwningTag)
133+ : handle_(handle, &dummy_metadata_destroyer) {
115134
116135}
117136
118137vector<BrokerMetadata> Metadata::get_brokers () const {
138+ assert (handle_);
119139 vector<BrokerMetadata> output;
120140 for (int i = 0 ; i < handle_->broker_cnt ; ++i) {
121141 const rd_kafka_metadata_broker_t & broker = handle_->brokers [i];
@@ -125,6 +145,7 @@ vector<BrokerMetadata> Metadata::get_brokers() const {
125145}
126146
127147vector<TopicMetadata> Metadata::get_topics () const {
148+ assert (handle_);
128149 vector<TopicMetadata> output;
129150 for (int i = 0 ; i < handle_->topic_cnt ; ++i) {
130151 const rd_kafka_metadata_topic_t & topic = handle_->topics [i];
@@ -134,6 +155,7 @@ vector<TopicMetadata> Metadata::get_topics() const {
134155}
135156
136157vector<TopicMetadata> Metadata::get_topics (const unordered_set<string>& topics) const {
158+ assert (handle_);
137159 vector<TopicMetadata> output;
138160 for (int i = 0 ; i < handle_->topic_cnt ; ++i) {
139161 const rd_kafka_metadata_topic_t & topic = handle_->topics [i];
@@ -145,6 +167,7 @@ vector<TopicMetadata> Metadata::get_topics(const unordered_set<string>& topics)
145167}
146168
147169vector<TopicMetadata> Metadata::get_topics_prefixed (const string& prefix) const {
170+ assert (handle_);
148171 vector<TopicMetadata> output;
149172 for (int i = 0 ; i < handle_->topic_cnt ; ++i) {
150173 const rd_kafka_metadata_topic_t & topic = handle_->topics [i];
@@ -156,4 +179,13 @@ vector<TopicMetadata> Metadata::get_topics_prefixed(const string& prefix) const
156179 return output;
157180}
158181
182+
183+ Metadata::operator bool () const {
184+ return handle_ != nullptr ;
185+ }
186+
187+ const rd_kafka_metadata_t * Metadata::get_handle () const {
188+ return handle_.get ();
189+ }
190+
159191} // cppkafka
0 commit comments