12#ifndef SEEN_INKSCAPE_UTIL_HYBRID_POINTER_H
13#define SEEN_INKSCAPE_UTIL_HYBRID_POINTER_H
32 std::variant<NonOwningPtr, OwningPtr>
_pointer =
nullptr;
40 template<
typename DerivedType,
typename... Args>
requires std::is_base_of_v<T, DerivedType>
46 return *plain_pointer;
48 return std::get<OwningPtr>(
_pointer).get();
52 explicit operator bool()
const {
return bool(
get()); }
A helper class holding an owning or non-owning pointer depending on the memory management requirement...
std::variant< NonOwningPtr, OwningPtr > _pointer
std::unique_ptr< T > OwningPtr
HybridPointer(OwningPtr owning_pointer)
static HybridPointer make_nonowning(T *plain_pointer)
HybridPointer(NonOwningPtr nonowning_pointer)
HybridPointer & operator=(OwningPtr &&adopt)
Adopt an owning pointer.
static HybridPointer make_owning(Args &&...args)
NonOwningPtr operator->() const
Miscellaneous supporting code.