Removed dependency on Producer and dr_callback_proxy

This commit is contained in:
accelerated
2018-06-06 19:15:34 -04:00
parent f746653841
commit 23810654ab
8 changed files with 72 additions and 80 deletions

View File

@@ -31,11 +31,10 @@
#define CPPKAFKA_MESSAGE_INTERNAL_H
#include <memory>
#include "message.h"
namespace cppkafka {
class Producer;
class Message;
struct Internal {
virtual ~Internal() = default;
@@ -45,16 +44,37 @@ using InternalPtr = std::shared_ptr<Internal>;
/**
* \brief Private message data structure
*/
class MessageInternal {
friend Producer;
public:
static std::unique_ptr<MessageInternal> load(const Producer& producer, Message& message);
private:
struct MessageInternal {
MessageInternal(void* user_data, std::shared_ptr<Internal> internal);
static std::unique_ptr<MessageInternal> load(Message& message);
void* user_data_;
InternalPtr internal_;
};
template <typename BuilderType>
struct MessageInternalGuard {
MessageInternalGuard(BuilderType& builder)
: builder_(builder),
user_data_(builder.user_data()) {
if (builder_.internal()) {
// Swap contents with user_data
ptr_.reset(new MessageInternal(user_data_, builder_.internal()));
builder_.user_data(ptr_.get()); //overwrite user data
}
}
~MessageInternalGuard() {
//Restore user data
builder_.user_data(user_data_);
}
void release() {
ptr_.release();
}
private:
BuilderType& builder_;
std::unique_ptr<MessageInternal> ptr_;
void* user_data_;
};
}
#endif //CPPKAFKA_MESSAGE_INTERNAL_H