#pragma once #include "types.hpp" #include "DataView.hpp" namespace odhtdb { class OwnedMemory { public: OwnedMemory() : data(nullptr), size(0) {} OwnedMemory(void *_data, usize _size) : data(_data), size(_size) {} OwnedMemory(OwnedMemory &&other); ~OwnedMemory(); // Do not allow copy of this struct, forcing move when returning a OwnedMemory in a function OwnedMemory(OwnedMemory&) = delete; OwnedMemory& operator = (OwnedMemory&) = delete; const DataView getView() const { return DataView(data, size); } void *data; usize size; }; class OwnedByteArray { public: OwnedByteArray() : data(nullptr), size(0) {} OwnedByteArray(u8 *_data, usize _size) : data(_data), size(_size) {} OwnedByteArray(OwnedByteArray &&other) { data = other.data; size = other.size; other.data = nullptr; other.size = 0; } ~OwnedByteArray() { delete[] data; } // Do not allow copy of this struct, forcing move when returning a OwnedByteArray in a function OwnedByteArray(OwnedByteArray&) = delete; OwnedByteArray& operator = (OwnedByteArray&) = delete; const DataView getView() const { return DataView(data, size); } u8 *data; usize size; }; }