LeviLamina
Loading...
Searching...
No Matches
UniqueOwnerPointer.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4#include "mc/deps/core/utility/EnableNonOwnerReferences.h"
5
6#include "mc/deps/core/utility/EnableNonOwnerReferences.h"
7
8namespace Bedrock {
9
10template <class T>
12public:
13 std::unique_ptr<Bedrock::EnableNonOwnerReferences> mEnableNonOwnerReferences;
14 std::unique_ptr<T> mValue;
15
16public:
17 UniqueOwnerPointer() = default;
18 UniqueOwnerPointer(nullptr_t) {}
19 ~UniqueOwnerPointer() = default;
20
22 UniqueOwnerPointer& operator=(UniqueOwnerPointer const&) = delete;
23
25 UniqueOwnerPointer& operator=(UniqueOwnerPointer&&) = default;
26
27 UniqueOwnerPointer(std::unique_ptr<T> ptr)
28 : mEnableNonOwnerReferences(std::make_unique<Bedrock::EnableNonOwnerReferences>(*ptr)),
29 mValue(std::move(ptr)) {}
30
31 UniqueOwnerPointer& operator=(nullptr_t) { reset(); }
32
33 T* get() const { return mValue.get(); }
34 T* operator->() const { return get(); }
35 T& operator*() const { return *get(); }
36
37 bool isValid() const { return mValue != nullptr; }
38 explicit operator bool() const { return isValid(); }
39
40 void reset() {
41 mEnableNonOwnerReferences.reset();
42 mValue.reset();
43 }
44
45 bool operator==(UniqueOwnerPointer const& other) const { return mValue == other.mValue; }
46 bool operator==(nullptr_t) const { return mValue == nullptr; }
47};
48
49} // namespace Bedrock
Definition UniqueOwnerPointer.h:11