1 #ifndef UTILS_RESOURCEGUARD_H
2 #define UTILS_RESOURCEGUARD_H
61 class FlagType = bool,
62 FlagType InvalidVal = std::is_lvalue_reference<T>::value,
63 class =
typename std::enable_if<
65 !std::is_same<FlagType, bool>::value &&
67 (std::is_same<FlagType, bool>::value ||
68 std::is_same<FlagType, T>::value) &&
70 std::is_trivially_default_constructible<Relinquish>::value
79 if (m_val != InvalidVal)
90 other.m_val = InvalidVal;
94 if (m_val != InvalidVal) {
98 other.m_val = InvalidVal;
111 operator bool()
const {
112 return m_val != InvalidVal;
117 return m_val != InvalidVal;
125 if (m_val != InvalidVal) {
161 template<
class T,
class Relinquish>
167 m_val(val), m_isvalid(true) {}
181 m_isvalid(other.m_isvalid) {
183 other.m_isvalid =
false;
191 m_isvalid = other.m_isvalid;
193 other.m_isvalid =
false;
206 operator bool()
const {
253 template<
class T,
class Relinquish>
282 operator bool()
const {
Specialization of ResourceGuard when we use an additional boolean flag to denote the invalid value.
Definition: ResourceGuard.h:162
T Release()
Definition: ResourceGuard.h:225
ResourceGuard & operator=(ResourceGuard &&other)
Definition: ResourceGuard.h:186
ResourceGuard(const ResourceGuard &)=delete
constexpr bool operator!=(T rhs) const
Definition: ResourceGuard.h:238
ResourceGuard(ResourceGuard &&other)
Definition: ResourceGuard.h:179
T Get() const
Definition: ResourceGuard.h:202
T m_val
Definition: ResourceGuard.h:244
bool IsValid() const
Definition: ResourceGuard.h:211
ResourceGuard()
Definition: ResourceGuard.h:164
void Reset()
Definition: ResourceGuard.h:216
ResourceGuard & operator=(const ResourceGuard &)=delete
bool m_isvalid
Definition: ResourceGuard.h:245
constexpr bool operator==(T rhs) const
Definition: ResourceGuard.h:233
ResourceGuard(T val)
Definition: ResourceGuard.h:166
~ResourceGuard()
Definition: ResourceGuard.h:169
Specialization of ResourceGuard where we have an always-valid value (e.g., lvalue-ref).
Definition: ResourceGuard.h:254
ResourceGuard(ResourceGuard &&other)=delete
T m_val
Definition: ResourceGuard.h:302
ResourceGuard & operator=(ResourceGuard &&other)=delete
constexpr bool operator==(T rhs) const
Definition: ResourceGuard.h:292
constexpr bool operator!=(T rhs) const
Definition: ResourceGuard.h:297
ResourceGuard & operator=(const ResourceGuard &)=delete
ResourceGuard(T val)
Definition: ResourceGuard.h:258
ResourceGuard(const ResourceGuard &)=delete
bool IsValid() const
Definition: ResourceGuard.h:287
~ResourceGuard()
Definition: ResourceGuard.h:261
T Get() const
Definition: ResourceGuard.h:278
ResourceGuard is used for automatically relinquishes some resource when it goes out of scope.
Definition: ResourceGuard.h:72
T m_val
Definition: ResourceGuard.h:154
T Get() const
Definition: ResourceGuard.h:107
bool IsValid() const
Definition: ResourceGuard.h:116
ResourceGuard(ResourceGuard &&other)
Definition: ResourceGuard.h:88
ResourceGuard & operator=(ResourceGuard &&other)
Definition: ResourceGuard.h:93
~ResourceGuard()
Definition: ResourceGuard.h:78
ResourceGuard(T val)
Definition: ResourceGuard.h:76
T Release()
Releases the underlying resource without relinquishing it and returns it to the caller.
Definition: ResourceGuard.h:137
void Reset()
Relinquishes the underlying resource and sets its to an invalid value.
Definition: ResourceGuard.h:124
constexpr bool operator!=(T rhs) const
Definition: ResourceGuard.h:149
ResourceGuard(const ResourceGuard &)=delete
ResourceGuard()
Definition: ResourceGuard.h:74
ResourceGuard & operator=(const ResourceGuard &)=delete
constexpr bool operator==(T rhs) const
Definition: ResourceGuard.h:144