创建一个message buffer用于储存各种数据。
#include <future>
#include <iostream>
#include <mutex>
#include <thread>
#include <vector>
#include <unistd.h>
#include <chrono>
#include <stdio.h>
#include <memory>
#include <map>
#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;
#define MESSAGE_BUFFR_DEFAULT_CAPACITY 256
struct MessageBufferNode
{
int offset;
int size;
MessageBufferNode() : offset(0), size(0){};
MessageBufferNode(int value1, int value2) : offset(value1), size(value2){};
void log()
{
printf("offset:%d,size:%d \n", offset, size);
}
};
typedef class __attribute__((visibility("default"))) MessageBuffer
{
public:
MessageBuffer();
MessageBuffer(const MessageBuffer&);
MessageBuffer(MessageBuffer&&);
MessageBuffer& operator=(MessageBuffer const&) = delete;
MessageBuffer& operator =(MessageBuffer&&);
~MessageBuffer();
void dump();
bool set(std::string key_, void* addr_, int size_);
void* get(std::string key_);
bool expendsize(int value);
private:
void* m_dataPtr;
int m_capacity;
int m_offset;
std::map< std::string, MessageBufferNode > m_map;
std::mutex m_mutex;
};
// cpp文件
MessageBuffer::MessageBuffer() : m_capacity(MESSAGE_BUFFR_DEFAULT_CAPACITY), m_offset(0)
{
m_dataPtr = malloc(m_capacity);
}
MessageBuffer::MessageBuffer(const MessageBuffer& mb)
{
m_capacity = mb.m_capacity;
m_offset = mb.m_offset;
m_dataPtr = nullptr;
if (mb.m_dataPtr != nullptr)
{
m_map = mb.m_map;
m_dataPtr = malloc(m_capacity);
memcpy(m_dataPtr, mb.m_dataPtr, mb.m_capacity);
}
}
MessageBuffer::MessageBuffer(MessageBuffer && mb)
{
m_capacity = mb.m_capacity;
m_offset = mb.m_offset;
m_dataPtr = mb.m_dataPtr;
m_map = mb.m_map;
mb.m_dataPtr = nullptr;
}
MessageBuffer& MessageBuffer::operator=(Mess