mirror of
https://github.com/Telecominfraproject/wlan-cloud-lib-cppkafka.git
synced 2025-11-01 02:57:53 +00:00
Added constructor from another HeaderList type
This commit is contained in:
@@ -89,7 +89,7 @@ public:
|
|||||||
* \param last An iterator to the end of data (not included)
|
* \param last An iterator to the end of data (not included)
|
||||||
*/
|
*/
|
||||||
template <typename Iter>
|
template <typename Iter>
|
||||||
Buffer(const Iter first, Iter last)
|
Buffer(const Iter first, const Iter last)
|
||||||
: Buffer(&*first, std::distance(first, last)) {
|
: Buffer(&*first, std::distance(first, last)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -51,6 +51,9 @@ namespace cppkafka {
|
|||||||
template <typename HeaderType>
|
template <typename HeaderType>
|
||||||
class HeaderList {
|
class HeaderList {
|
||||||
public:
|
public:
|
||||||
|
template <typename OtherHeaderType>
|
||||||
|
friend class HeaderList;
|
||||||
|
|
||||||
using BufferType = typename HeaderType::ValueType;
|
using BufferType = typename HeaderType::ValueType;
|
||||||
using Iterator = HeaderIterator<HeaderType>;
|
using Iterator = HeaderIterator<HeaderType>;
|
||||||
/**
|
/**
|
||||||
@@ -75,6 +78,16 @@ public:
|
|||||||
*/
|
*/
|
||||||
explicit HeaderList(rd_kafka_headers_t* handle);
|
explicit HeaderList(rd_kafka_headers_t* handle);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Create a header list from another header list type
|
||||||
|
* \param other The other list
|
||||||
|
*/
|
||||||
|
template <typename OtherHeaderType>
|
||||||
|
HeaderList(const HeaderList<OtherHeaderType>& other);
|
||||||
|
|
||||||
|
template <typename OtherHeaderType>
|
||||||
|
HeaderList(HeaderList<OtherHeaderType>&& other);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Add a header to the list. This translates to rd_kafka_header_add().
|
* \brief Add a header to the list. This translates to rd_kafka_header_add().
|
||||||
* \param header The header.
|
* \param header The header.
|
||||||
@@ -219,6 +232,20 @@ HeaderList<HeaderType>::HeaderList(rd_kafka_headers_t* handle, NonOwningTag)
|
|||||||
assert(handle);
|
assert(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename HeaderType>
|
||||||
|
template <typename OtherHeaderType>
|
||||||
|
HeaderList<HeaderType>::HeaderList(const HeaderList<OtherHeaderType>& other)
|
||||||
|
: handle_(other.handle_) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename HeaderType>
|
||||||
|
template <typename OtherHeaderType>
|
||||||
|
HeaderList<HeaderType>::HeaderList(HeaderList<OtherHeaderType>&& other)
|
||||||
|
: handle_(std::move(other.handle_)) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// Methods
|
// Methods
|
||||||
template <typename HeaderType>
|
template <typename HeaderType>
|
||||||
Error HeaderList<HeaderType>::add(const HeaderType& header) {
|
Error HeaderList<HeaderType>::add(const HeaderType& header) {
|
||||||
@@ -279,13 +306,15 @@ bool HeaderList<HeaderType>::empty() const {
|
|||||||
template <typename HeaderType>
|
template <typename HeaderType>
|
||||||
typename HeaderList<HeaderType>::Iterator
|
typename HeaderList<HeaderType>::Iterator
|
||||||
HeaderList<HeaderType>::begin() const {
|
HeaderList<HeaderType>::begin() const {
|
||||||
return empty() ? end() : Iterator(make_non_owning(handle_.get()), 0);
|
return empty() ? Iterator(HeaderList<HeaderType>(), 0) :
|
||||||
|
Iterator(make_non_owning(handle_.get()), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename HeaderType>
|
template <typename HeaderType>
|
||||||
typename HeaderList<HeaderType>::Iterator
|
typename HeaderList<HeaderType>::Iterator
|
||||||
HeaderList<HeaderType>::end() const {
|
HeaderList<HeaderType>::end() const {
|
||||||
return Iterator(empty() ? HeaderList<HeaderType>() : make_non_owning(handle_.get()), size());
|
return empty() ? Iterator(HeaderList<HeaderType>(), size()) :
|
||||||
|
Iterator(make_non_owning(handle_.get()), size());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename HeaderType>
|
template <typename HeaderType>
|
||||||
|
|||||||
@@ -244,6 +244,9 @@ BasicMessageBuilder<T, C>::BasicMessageBuilder(const Message& message)
|
|||||||
: topic_(message.get_topic()),
|
: topic_(message.get_topic()),
|
||||||
key_(Buffer(message.get_key().get_data(), message.get_key().get_size())),
|
key_(Buffer(message.get_key().get_data(), message.get_key().get_size())),
|
||||||
#if (RD_KAFKA_VERSION >= RD_KAFKA_HEADERS_SUPPORT_VERSION)
|
#if (RD_KAFKA_VERSION >= RD_KAFKA_HEADERS_SUPPORT_VERSION)
|
||||||
|
//Here we must copy explicitly the Message headers since they are non-owning and this class
|
||||||
|
//assumes full ownership. Otherwise we will be holding an invalid handle when Message goes
|
||||||
|
//out of scope and rdkafka frees its resource.
|
||||||
header_list_(message.get_header_list() ?
|
header_list_(message.get_header_list() ?
|
||||||
HeaderListType(rd_kafka_headers_copy(message.get_header_list().get_handle())) : HeaderListType()), //copy headers
|
HeaderListType(rd_kafka_headers_copy(message.get_header_list().get_handle())) : HeaderListType()), //copy headers
|
||||||
#endif
|
#endif
|
||||||
@@ -261,8 +264,7 @@ BasicMessageBuilder<T, C>::BasicMessageBuilder(const BasicMessageBuilder<U, V>&
|
|||||||
: topic_(rhs.topic()),
|
: topic_(rhs.topic()),
|
||||||
partition_(rhs.partition()),
|
partition_(rhs.partition()),
|
||||||
#if (RD_KAFKA_VERSION >= RD_KAFKA_HEADERS_SUPPORT_VERSION)
|
#if (RD_KAFKA_VERSION >= RD_KAFKA_HEADERS_SUPPORT_VERSION)
|
||||||
header_list_(rhs.header_list() ?
|
header_list_(rhs.header_list()), //copy headers
|
||||||
HeaderListType(rd_kafka_headers_copy(rhs.header_list().get_handle())) : HeaderListType()), //copy headers
|
|
||||||
#endif
|
#endif
|
||||||
timestamp_(rhs.timestamp()),
|
timestamp_(rhs.timestamp()),
|
||||||
user_data_(rhs.user_data()),
|
user_data_(rhs.user_data()),
|
||||||
@@ -277,8 +279,7 @@ BasicMessageBuilder<T, C>::BasicMessageBuilder(BasicMessageBuilder<U, V>&& rhs)
|
|||||||
: topic_(rhs.topic()),
|
: topic_(rhs.topic()),
|
||||||
partition_(rhs.partition()),
|
partition_(rhs.partition()),
|
||||||
#if (RD_KAFKA_VERSION >= RD_KAFKA_HEADERS_SUPPORT_VERSION)
|
#if (RD_KAFKA_VERSION >= RD_KAFKA_HEADERS_SUPPORT_VERSION)
|
||||||
header_list_(rhs.header_list() ?
|
header_list_(std::move(header_list())), //assume header ownership
|
||||||
HeaderListType(rhs.header_list().release_handle()) : HeaderListType()), //assume header ownership
|
|
||||||
#endif
|
#endif
|
||||||
timestamp_(rhs.timestamp()),
|
timestamp_(rhs.timestamp()),
|
||||||
user_data_(rhs.user_data()),
|
user_data_(rhs.user_data()),
|
||||||
|
|||||||
Reference in New Issue
Block a user