#include <iostream>
#include <vector>
#include <algorithm>
class MemoryBuffer {
public:
explicit MemoryBuffer(size_t len) : buffer_(len, 0) {
}
virtual ~MemoryBuffer() = default;
MemoryBuffer(const MemoryBuffer &) = default;
MemoryBuffer(MemoryBuffer &&) = default;
MemoryBuffer & operator = (const MemoryBuffer &) = default;
MemoryBuffer & operator = (MemoryBuffer &&) = default;
public:
bool write(const char *data, size_t length) {
if (buffer_.size() >= max_capacity) {
return false;
}
size_t len = offset_ + length;
if (buffer_.size() < len) {
buffer_.resize(len);
}
std::copy(data, data + length, begin(buffer_) + offset_);
offset_ += length;
return true;
}
inline std::vector<char> release() {
return std::move(buffer_);
}
inline void set_max_capacity(size_t cap) {
max_capacity = cap;
}
inline size_t size() const {
return buffer_.size();
}
private:
size_t offset_ = 0;
size_t max_capacity = 1024 * 1024;
std::vector<char>buffer_;
};
int main() {
MemoryBuffer buffer(1024);
MemoryBuffer buffer1(64);
buffer.write("123", 3);
buffer1 = buffer;
std::cout << buffer1.size() << std::endl;
auto vec = buffer.release();
std::cout << vec.size() << std::endl;
for (int i = 0;i < 3;i++) {
std::cout << vec[i] << std::endl;
}
return 0;
}