15 template <
typename T,
typename Deleter>
21 ~PtrStore() { free(); }
23 PtrStore(
const PtrStore &) =
delete;
24 PtrStore &operator=(
const PtrStore &) =
delete;
31 reset(other.release());
36 bool valid()
const {
return m_ptr; }
38 operator bool()
const {
return valid(); }
46 std::string_view
str() const noexcept
47 requires std::same_as<T,
char> {
return m_ptr ? :
""; }
50 const T *
get()
const noexcept {
return m_ptr; }
52 T *
get() noexcept {
return m_ptr; }
54 T *operator*() noexcept {
return m_ptr; }
56 const T *operator*() const noexcept {
return m_ptr; }
58 T *operator->() noexcept {
return m_ptr; }
60 const T *operator->() const noexcept {
return m_ptr; }
64 return std::exchange(m_ptr,
nullptr);
90 [[no_unique_address]] Deleter m_deleter;
93 template<
typename T,
typename Deleter>
94 requires std::same_as<T, char>
95 std::ostream &operator<<(std::ostream &os, const PtrStore<T, Deleter> &err)
97 return os << err.str();
T ** ptr() noexcept
Get a pointer to the internal pointer.
Definition: PtrStore.h:79
std::string_view str() const noexcept requires std
Return the current pointer as string.
Definition: PtrStore.h:46
bool operator!() const
! wrapper around valid()
Definition: PtrStore.h:40
The Deleter for UniqueHolder types.
Definition: Unique.h:15
A store for a pointer which is freed in the destructor using sqlite3_free()
Definition: PtrStore.h:16
PtrStore(PtrStore &&other) noexcept
Move constructor.
Definition: PtrStore.h:27
PtrStore & operator=(PtrStore &&other) noexcept
Move assignment.
Definition: PtrStore.h:29
PtrStore(T *t) noexcept
Construct a new PtrStore with pointer set to t.
Definition: PtrStore.h:20
bool valid() const
Does this instance hold a valid pointer?
Definition: PtrStore.h:36
void reset(T *t=nullptr)
Set the pointer to t.
Definition: PtrStore.h:68