SDL3pp
A slim C++ wrapper for SDL3
Loading...
Searching...
No Matches
SDL3pp_resource.h
1#ifndef SDL3PP_RESOURCE_H_
2#define SDL3PP_RESOURCE_H_
3
4#include <cstdlib>
5#include <utility>
6
7namespace SDL {
8
17
19template<typename RAW_POINTER, typename RAW_CONST_POINTER = RAW_POINTER>
21{
22public:
24 using RawPointer = RAW_POINTER;
25
27 using RawConstPointer = RAW_CONST_POINTER;
28
30 constexpr ResourceBaseT() = default;
31
33 constexpr ResourceBaseT(RawPointer resource)
34 : m_resource(resource)
35 {
36 }
37
39 constexpr ResourceBaseT(std::nullptr_t) {}
40
42 constexpr explicit operator bool() const { return !!m_resource; }
43
45 constexpr auto operator<=>(const ResourceBaseT& other) const = default;
46
48 constexpr RawConstPointer operator->() const noexcept { return m_resource; }
49
51 constexpr RawPointer operator->() noexcept { return m_resource; }
52
54 constexpr RawPointer get() const noexcept { return m_resource; }
55
57 constexpr RawPointer release() noexcept
58 {
59 auto r = m_resource;
60 m_resource = {};
61 return r;
62 }
63
65 friend constexpr void swap(ResourceBaseT& lhs, ResourceBaseT& rhs) noexcept
66 {
67 std::swap(lhs.m_resource, rhs.m_resource);
68 }
69
70protected:
72 constexpr ~ResourceBaseT() = default;
73
75 constexpr ResourceBaseT(const ResourceBaseT&) = default;
76
78 constexpr ResourceBaseT(ResourceBaseT&&) noexcept = default;
79
81 constexpr ResourceBaseT& operator=(const ResourceBaseT&) = default;
82
84 constexpr ResourceBaseT& operator=(ResourceBaseT&&) noexcept = default;
85
86private:
87 RawPointer m_resource = {};
88};
89
91template<typename BASE>
92struct ResourceRefT : BASE
93{
94 using BASE::BASE;
95
97 using RawPointer = BASE::RawPointer;
98
100 using RawConstPointer = BASE::RawConstPointer;
101
103 constexpr ResourceRefT(const BASE& resource) noexcept
104 : BASE(resource.get())
105 {
106 }
107
109 constexpr operator RawPointer() const noexcept { return this->get(); }
110};
111
113template<typename RAW_POINTER, typename RAW_CONST_POINTER>
115{
116public:
118 using RawPointer = RAW_POINTER;
119
121 using RawConstPointer = RAW_CONST_POINTER;
122
125 : m_resource(resource)
126 {
127 }
128
130 constexpr ResourceConstRef(std::nullptr_t = nullptr)
131 : m_resource(nullptr)
132 {
133 }
134
136 constexpr explicit operator bool() const { return !!m_resource; }
137
139 constexpr auto operator<=>(const ResourceConstRef& other) const = default;
140
142 constexpr operator RawConstPointer() const { return m_resource; }
143
145 constexpr operator RawPointer() const
146 {
147 return const_cast<RawPointer>(m_resource);
148 }
149
151 constexpr auto operator->() const { return m_resource; }
152
153private:
154 RawConstPointer m_resource;
155};
156
158
159} // namespace SDL
160
161#endif /* SDL3PP_RESOURCE_H_ */
constexpr ResourceBaseT(ResourceBaseT &&) noexcept=default
Move constructor.
RAW_CONST_POINTER RawConstPointer
The underlying const raw pointer type.
Definition SDL3pp_resource.h:27
constexpr RawPointer release() noexcept
Retrieves underlying resource pointer and clear this.
Definition SDL3pp_resource.h:57
constexpr RawConstPointer operator->() const noexcept
member access to underlying resource pointer.
Definition SDL3pp_resource.h:48
constexpr auto operator<=>(const ResourceBaseT &other) const =default
Comparison.
constexpr ResourceBaseT(const ResourceBaseT &)=default
Copy constructor.
RAW_POINTER RawPointer
The underlying raw pointer type.
Definition SDL3pp_resource.h:24
friend constexpr void swap(ResourceBaseT &lhs, ResourceBaseT &rhs) noexcept
Swaps the underlying resource pointers.
Definition SDL3pp_resource.h:65
constexpr RawPointer operator->() noexcept
member access to underlying resource pointer.
Definition SDL3pp_resource.h:51
constexpr ResourceBaseT(RawPointer resource)
Constructs from resource pointer.
Definition SDL3pp_resource.h:33
constexpr RawPointer get() const noexcept
Retrieves underlying resource pointer.
Definition SDL3pp_resource.h:54
constexpr ResourceBaseT(std::nullptr_t)
Constructs null/invalid.
Definition SDL3pp_resource.h:39
constexpr ~ResourceBaseT()=default
Destructor.
constexpr ResourceBaseT()=default
Default constructor, creates null/invalid resource.
AnimationRaw RawPointer
Definition SDL3pp_resource.h:118
AnimationRawConst RawConstPointer
Definition SDL3pp_resource.h:121
constexpr ResourceConstRef(RawConstPointer resource)
Constructs from const pointer.
Definition SDL3pp_resource.h:124
constexpr auto operator<=>(const ResourceConstRef &other) const =default
Comparison.
constexpr ResourceConstRef(std::nullptr_t=nullptr)
Constructs null/invalid.
Definition SDL3pp_resource.h:130
constexpr auto operator->() const
member access to underlying type.
Definition SDL3pp_resource.h:151
Main include header for the SDL3pp library.
AsyncIOBase::RawConstPointer RawConstPointer
Definition SDL3pp_resource.h:100
AsyncIOBase::RawPointer RawPointer
Definition SDL3pp_resource.h:97
constexpr ResourceRefT(const BASE &resource) noexcept
Constructs from resource.
Definition SDL3pp_resource.h:103