33 lines
		
	
	
	
		
			907 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
	
		
			907 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include <memory/scope.hpp>
 | |
| #include <memory>
 | |
| 
 | |
| namespace lt::memory {
 | |
| 
 | |
| /** Wrapper around std::unique_ptr.
 | |
|  *
 | |
|  * @note Currently just an alias, might turn into an implementation later.
 | |
|  * @ref https://en.cppreference.com/w/cpp/memory/unique_ptr.html
 | |
|  */
 | |
| template<typename t>
 | |
| using Scope = std::unique_ptr<t>;
 | |
| 
 | |
| /** Allocates memory for an `Underlying_T` and directly constructs it there.
 | |
|  *
 | |
|  * @return A Scope<Underlying_T> to the constructed object.
 | |
|  */
 | |
| template<typename Underlying_T, typename... Args>
 | |
| constexpr Scope<Underlying_T> create_scope(Args &&...args)
 | |
| {
 | |
| 	return std::make_unique<Underlying_T>(std::forward<Args>(args)...);
 | |
| }
 | |
| 
 | |
| /** Converts c-style pointer of type `Underlying_T` to a `Scope<Underlying_T>`. */
 | |
| template<typename Underlying_T>
 | |
| constexpr Scope<Underlying_T> make_scope(Underlying_T *raw_pointer)
 | |
| {
 | |
| 	return Scope<Underlying_T>(raw_pointer);
 | |
| }
 | |
| 
 | |
| } // namespace lt::memory
 |