SlHelpers
Toggle main menu visibility
Loading...
Searching...
No Matches
PtrStore.h
1
// SPDX-License-Identifier: GPL-2.0-only
2
3
#pragma once
4
5
#include <concepts>
6
#include <iostream>
7
#include <string_view>
8
#include <utility>
9
10
namespace
SlHelpers {
11
15
template
<
typename
T,
typename
Deleter>
16
class
PtrStore {
17
public
:
18
PtrStore() noexcept : PtrStore(
nullptr
) {}
20
explicit
PtrStore
(T *t) noexcept : m_ptr(t), m_deleter(
Deleter
{}) {}
21
~PtrStore() { free(); }
22
23
PtrStore(
const
PtrStore &) =
delete
;
24
PtrStore &operator=(
const
PtrStore &) =
delete
;
25
27
PtrStore
(PtrStore &&other) noexcept : m_ptr(other.release()) {}
29
PtrStore &
operator=
(PtrStore &&other)
noexcept
{
30
if
(
this
!= &other)
31
reset
(other.release());
32
return
*
this
;
33
}
34
36
bool
valid
()
const
{
return
m_ptr; }
38
operator
bool()
const
{
return
valid
(); }
40
bool
operator!
()
const
{
return
!
valid
(); }
41
46
std::string_view
str
() const noexcept
47
requires std::same_as<T,
char
> {
return
m_ptr ? :
""
; }
48
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; }
61
63
T *
release
() {
64
return
std::exchange(m_ptr,
nullptr
);
65
}
66
68
void
reset
(T *t =
nullptr
) {
69
free();
70
m_ptr = t;
71
}
72
79
T **
ptr
() noexcept {
80
free();
81
return
&m_ptr;
82
}
83
private
:
84
void
free() {
85
m_deleter(m_ptr);
86
m_ptr =
nullptr
;
87
}
88
89
T *m_ptr;
90
[[no_unique_address]] Deleter m_deleter;
91
};
92
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)
96
{
97
return
os << err.str();
98
}
99
100
}
SlHelpers::Deleter
The Deleter for UniqueHolder types.
Definition
Unique.h:15
SlHelpers::PtrStore
A store for a pointer which is freed in the destructor using sqlite3_free().
Definition
PtrStore.h:16
SlHelpers::PtrStore::reset
void reset(T *t=nullptr)
Set the pointer to t.
Definition
PtrStore.h:68
SlHelpers::PtrStore::PtrStore
PtrStore(PtrStore &&other) noexcept
Move constructor.
Definition
PtrStore.h:27
SlHelpers::PtrStore::operator!
bool operator!() const
! wrapper around valid()
Definition
PtrStore.h:40
SlHelpers::PtrStore::str
std::string_view str() const noexcept
Return the current pointer as string.
Definition
PtrStore.h:46
SlHelpers::PtrStore::release
T * release()
Return the pointer and stop owning it.
Definition
PtrStore.h:63
SlHelpers::PtrStore::get
T * get() noexcept
Get the stored pointer.
Definition
PtrStore.h:52
SlHelpers::PtrStore::operator->
const T * operator->() const noexcept
Get the stored pointer.
Definition
PtrStore.h:60
SlHelpers::PtrStore::valid
bool valid() const
Does this instance hold a valid pointer?
Definition
PtrStore.h:36
SlHelpers::PtrStore::get
const T * get() const noexcept
Get the stored pointer.
Definition
PtrStore.h:50
SlHelpers::PtrStore::operator*
T * operator*() noexcept
Get the stored pointer.
Definition
PtrStore.h:54
SlHelpers::PtrStore::operator=
PtrStore & operator=(PtrStore &&other) noexcept
Move assignment.
Definition
PtrStore.h:29
SlHelpers::PtrStore::operator->
T * operator->() noexcept
Get the stored pointer.
Definition
PtrStore.h:58
SlHelpers::PtrStore::ptr
T ** ptr() noexcept
Get a pointer to the internal pointer.
Definition
PtrStore.h:79
SlHelpers::PtrStore::PtrStore
PtrStore(T *t) noexcept
Construct a new PtrStore with pointer set to t.
Definition
PtrStore.h:20
SlHelpers::PtrStore::operator*
const T * operator*() const noexcept
Get the stored pointer.
Definition
PtrStore.h:56
include
helpers
PtrStore.h
Generated by
1.17.0