mirror of
				https://github.com/Telecominfraproject/wlan-cloud-lib-cppkafka.git
				synced 2025-11-04 04:27:48 +00:00 
			
		
		
		
	Fixed Message::set_header_list as per review comments. Changed ClonablePtr to use clone() internally
This commit is contained in:
		@@ -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_;
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user