light/modules/lsd/scope.cppm

32 lines
905 B
Text
Raw Normal View History

2025-11-16 14:29:03 +03:30
export module lsd.scope_ptr;
import std;
2025-09-22 18:53:35 +03:30
2025-11-16 14:29:03 +03:30
export namespace lt::lsd {
2025-09-22 18:53:35 +03:30
2025-11-16 14:29:03 +03:30
/** 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
*/
2025-11-16 14:29:03 +03:30
template<typename t>
2025-11-18 19:06:44 +03:30
using scope = std::unique_ptr<t>;
2025-09-22 18:53:35 +03:30
/** Allocates memory for an `Underlying_T` and directly constructs it there.
*
* @return A Scope<Underlying_T> to the constructed object.
*/
2025-11-16 14:29:03 +03:30
template<typename Underlying_T, typename... Args>
2025-11-18 19:06:44 +03:30
constexpr auto create_scope(Args &&...args) -> scope<Underlying_T>
2025-09-22 18:53:35 +03:30
{
return std::make_unique<Underlying_T>(std::forward<Args>(args)...);
}
/** Converts c-style pointer of type `Underlying_T` to a `Scope<Underlying_T>`. */
2025-11-16 14:29:03 +03:30
template<typename Underlying_T>
2025-11-18 19:06:44 +03:30
constexpr auto make_scope(Underlying_T *raw_pointer) -> scope<Underlying_T>
2025-09-22 18:53:35 +03:30
{
2025-11-18 19:06:44 +03:30
return scope<Underlying_T>(raw_pointer);
2025-09-22 18:53:35 +03:30
}
2025-11-16 14:29:03 +03:30
} // namespace lt::lsd