#pragma once #include #include struct buffer { std::span data; buffer() = default; buffer(std::span d) : data(d) {} static buffer make(size_t size) { return buffer({new std::byte[size], size}); } buffer(buffer& other) = delete; buffer& operator=(buffer& other) = delete; buffer(buffer&& other) : data(std::exchange(other.data, {})) {} buffer& operator=(buffer&& other) { data = std::exchange(other.data, {}); return *this; } ~buffer() { if (data.data()) { delete[] data.data(); }; } };