Added logic to conditionally enable internal data

This commit is contained in:
accelerated
2018-06-05 09:07:00 -04:00
parent 597c026555
commit f746653841
8 changed files with 125 additions and 57 deletions

View File

@@ -35,6 +35,8 @@
namespace cppkafka {
class Producer;
struct Internal {
virtual ~Internal() = default;
};
@@ -44,25 +46,11 @@ using InternalPtr = std::shared_ptr<Internal>;
* \brief Private message data structure
*/
class MessageInternal {
friend class Producer;
friend Producer;
public:
static std::unique_ptr<MessageInternal> load(Message& message) {
if (message.get_user_data()) {
// Unpack internal data
std::unique_ptr<MessageInternal> internal_data(static_cast<MessageInternal*>(message.get_user_data()));
message.load_internal(internal_data->user_data_, internal_data->internal_);
return internal_data;
}
return nullptr;
}
static std::unique_ptr<MessageInternal> load(const Producer& producer, Message& message);
private:
MessageInternal(void* user_data, std::shared_ptr<Internal> internal)
: user_data_(user_data),
internal_(internal) {
}
MessageInternal(void* user_data, std::shared_ptr<Internal> internal);
void* user_data_;
InternalPtr internal_;
};