-enum class StorageType { NoData = 0, Flat = 1, Chunked = 2 };
-
-class Buffer {
-private:
- void* data_ = nullptr;
- std::size_t size_;
-
- explicit Buffer(std::size_t size) : size_(size) { data_ = ::operator new(size_); }
-
- Buffer(void* data, std::size_t size) : data_(data), size_(size) {}
-
-public:
- Buffer() = default;
- void clear() noexcept
- {
- ::operator delete(data_);
- data_ = nullptr;
- size_ = 0;
- }
-
- ~Buffer() noexcept { clear(); }
-
- static Buffer malloc(std::size_t size) { return Buffer(size); }
-
- // No copy
- Buffer(Buffer const& buffer) = delete;
- Buffer& operator=(Buffer const& buffer) = delete;
-
- // Move
- Buffer(Buffer&& that) noexcept : data_(that.data_), size_(that.size_)
- {
- that.data_ = nullptr;
- that.size_ = 0;
- }
- Buffer& operator=(Buffer&& that) noexcept
- {
- clear();
- data_ = that.data_;
- size_ = that.size_;
- that.data_ = nullptr;
- that.size_ = 0;
- return *this;
- }
-
- void* get() { return data_; }
- const void* get() const { return data_; }
- std::size_t size() const { return size_; }
-};
-