File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -140,7 +140,24 @@ class CPPKAFKA_API BrokerMetadata {
140140 */
141141class CPPKAFKA_API Metadata {
142142public:
143- Metadata (const rd_kafka_metadata_t * ptr);
143+ /* *
144+ * \brief Creates a Metadata object that doesn't take ownership of the handle
145+ *
146+ * \param handle The handle to be used
147+ */
148+ static Metadata make_non_owning (const rd_kafka_metadata_t * handle);
149+
150+ /* *
151+ * \brief Constructs an empty metadata object
152+ *
153+ * \remark Using any methods except Metadata::get_handle on an empty metadata is undefined behavior
154+ */
155+ Metadata ();
156+
157+ /* *
158+ * Constructor
159+ */
160+ Metadata (const rd_kafka_metadata_t * handle);
144161
145162 /* *
146163 * Gets the brokers' metadata
@@ -165,8 +182,22 @@ class CPPKAFKA_API Metadata {
165182 * \param prefix The prefix to be looked up
166183 */
167184 std::vector<TopicMetadata> get_topics_prefixed (const std::string& prefix) const ;
185+
186+ /* *
187+ * Indicates whether this metadata is valid (not null)
188+ */
189+ explicit operator bool () const ;
190+
191+ /* *
192+ * Returns the rdkakfa handle
193+ */
194+ const rd_kafka_metadata_t * get_handle () const ;
168195private:
169196 using HandlePtr = std::unique_ptr<const rd_kafka_metadata_t , decltype (&rd_kafka_metadata_destroy)>;
197+
198+ struct NonOwningTag { };
199+
200+ Metadata (const rd_kafka_metadata_t * handle, NonOwningTag);
170201
171202 HandlePtr handle_;
172203};
Original file line number Diff line number Diff line change @@ -82,6 +82,13 @@ class CPPKAFKA_API Topic {
8282 * \param partition The partition to check
8383 */
8484 bool is_partition_available (int partition) const ;
85+
86+ /* *
87+ * Indicates whether this topic is valid (not null)
88+ */
89+ explicit operator bool () const {
90+ return handle_ != nullptr ;
91+ }
8592
8693 /* *
8794 * Returns the rdkakfa handle
Original file line number Diff line number Diff line change @@ -110,8 +110,26 @@ uint16_t BrokerMetadata::get_port() const {
110110
111111// Metadata
112112
113- Metadata::Metadata (const rd_kafka_metadata_t * ptr)
114- : handle_(ptr, &rd_kafka_metadata_destroy) {
113+ void dummy_metadata_destroyer (const rd_kafka_metadata_t *) {
114+
115+ }
116+
117+ Metadata Metadata::make_non_owning (const rd_kafka_metadata_t * handle) {
118+ return Metadata (handle, NonOwningTag{});
119+ }
120+
121+ Metadata::Metadata ()
122+ : handle_(nullptr , nullptr ) {
123+
124+ }
125+
126+ Metadata::Metadata (const rd_kafka_metadata_t * handle)
127+ : handle_(handle, &rd_kafka_metadata_destroy) {
128+
129+ }
130+
131+ Metadata::Metadata (const rd_kafka_metadata_t * handle, NonOwningTag)
132+ : handle_(handle, &dummy_metadata_destroyer) {
115133
116134}
117135
@@ -156,4 +174,13 @@ vector<TopicMetadata> Metadata::get_topics_prefixed(const string& prefix) const
156174 return output;
157175}
158176
177+
178+ Metadata::operator bool () const {
179+ return handle_ != nullptr ;
180+ }
181+
182+ const rd_kafka_metadata_t * Metadata::get_handle () const {
183+ return handle_.get ();
184+ }
185+
159186} // cppkafka
You can’t perform that action at this time.
0 commit comments