31 lines
		
	
	
		
			632 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			632 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include <span>
 | |
| #include <utility>
 | |
| 
 | |
| struct buffer {
 | |
|     std::span<std::byte> data;
 | |
| 
 | |
|     buffer() = default;
 | |
|     buffer(std::span<std::byte> 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();
 | |
|         };
 | |
|     }
 | |
| };
 |