SDL3pp
A slim C++ wrapper for SDL3
Loading...
Searching...
No Matches
SDL3pp_optionalRef.h
1#ifndef SDL3PP_OPTIONAL_REF_H_
2#define SDL3PP_OPTIONAL_REF_H_
3
4#include <optional>
5
6namespace SDL {
7
18template<class T>
20{
21 T* ptr;
22
23public:
24 constexpr OptionalRef(std::nullopt_t = std::nullopt)
25 : ptr(nullptr)
26 {
27 }
28
29 constexpr OptionalRef(T& value)
30 : ptr(&value)
31 {
32 }
33
34 constexpr auto operator<=>(const OptionalRef&) const = default;
35
36 constexpr bool has_value() const { return ptr != nullptr; }
37
38 constexpr const T& value() const { return *ptr; }
39 constexpr T& value() { return *ptr; }
40
41 constexpr operator T*() const { return ptr; }
42
43 constexpr bool operator==(std::nullopt_t) const { return ptr == nullptr; }
44
45 constexpr T& operator*() { return *ptr; }
46 constexpr const T& operator*() const { return *ptr; }
47 constexpr T* operator->() { return ptr; }
48 constexpr const T* operator->() const { return ptr; }
49};
50
51template<class T>
52constexpr OptionalRef<T> fromNullable(T* ptr)
53{
54 if (ptr) return {*ptr};
55 return std::nullopt;
56}
57
58} // namespace SDL
59
60#endif /* SDL3PP_OPTIONAL_REF_H_ */
Optional-like shim for references.
Definition SDL3pp_optionalRef.h:20
the main namespace where all SDL3pp public functions and types live
Definition SDL3pp_assert.h:7