Fixed Message::set_header_list as per review comments. Changed ClonablePtr to use clone() internally

This commit is contained in:
accelerated
2018-12-03 08:53:25 -05:00
parent e96dc6d1fc
commit 6bbddcd5d5
3 changed files with 7 additions and 29 deletions

View File

@@ -60,8 +60,7 @@ public:
* \param rhs The pointer to be copied
*/
ClonablePtr(const ClonablePtr& rhs)
: handle_(rhs.get_cloner() ? std::unique_ptr<T, Deleter>(rhs.clone(), rhs.get_deleter()) :
std::unique_ptr<T, Deleter>(rhs.get(), rhs.get_deleter())),
: handle_(std::unique_ptr<T, Deleter>(rhs.clone(), rhs.get_deleter())),
cloner_(rhs.get_cloner()) {
}
@@ -73,8 +72,7 @@ public:
*/
ClonablePtr& operator=(const ClonablePtr& rhs) {
if (this != &rhs) {
handle_ = rhs.get_cloner() ? std::unique_ptr<T, Deleter>(rhs.clone(), rhs.get_deleter()) :
std::unique_ptr<T, Deleter>(rhs.get(), rhs.get_deleter());
handle_ = std::unique_ptr<T, Deleter>(rhs.clone(), rhs.get_deleter());
cloner_ = rhs.get_cloner();
}
return *this;
@@ -130,7 +128,7 @@ private:
* \brief Clones the internal pointer using the specified cloner function.
*/
T* clone() const {
return cloner_ ? cloner_(handle_.get()) : handle_.get();
return cloner_ ? cloner_(get()) : get();
}
std::unique_ptr<T, Deleter> handle_;

View File

@@ -159,11 +159,6 @@ public:
*/
explicit operator bool() const;
/**
* \brief Indicates if this list owns the underlying handle or not.
*/
bool is_owning() const;
private:
struct NonOwningTag { };
static void dummy_deleter(rd_kafka_headers_t*) {}
@@ -313,11 +308,6 @@ HeaderList<HeaderType>::operator bool() const {
return static_cast<bool>(handle_);
}
template <typename HeaderType>
bool HeaderList<HeaderType>::is_owning() const {
return handle_.get_deleter() != &dummy_deleter;
}
} //namespace cppkafka
#endif //RD_KAFKA_HEADERS_SUPPORT_VERSION

View File

@@ -129,23 +129,13 @@ public:
#if (RD_KAFKA_VERSION >= RD_KAFKA_HEADERS_SUPPORT_VERSION)
/**
* \brief Sets the message's header list.
* \note After this call, the Message will take ownership of the header list.
* \note This calls rd_kafka_message_set_headers.
*/
void set_header_list(const HeaderListType& headers) {
assert(handle_);
assert(!headers.is_owning());
rd_kafka_message_set_headers(handle_.get(), headers.get_handle());
header_list_ = HeaderListType::make_non_owning(headers.get_handle());
}
/**
* \brief Sets the message's header list.
* \note After this call, the Message will take ownership of the header list.
*/
void set_header_list(HeaderListType&& headers) {
assert(handle_);
rd_kafka_message_set_headers(handle_.get(), headers.get_handle());
header_list_ = HeaderListType::make_non_owning(headers.release_handle());
rd_kafka_headers_t* handle_copy = rd_kafka_headers_copy(headers.get_handle());
rd_kafka_message_set_headers(handle_.get(), handle_copy);
header_list_ = HeaderListType::make_non_owning(handle_copy);
}
/**