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
6namespace Bedrock {
7
8template <class T>
10public:
11 std::unique_ptr<Bedrock::EnableNonOwnerReferences> mEnableNonOwnerReferences;
12 std::unique_ptr<T> mValue;
13
14public:
15 UniqueOwnerPointer() = default;
16 UniqueOwnerPointer(nullptr_t) {}
17 ~UniqueOwnerPointer() = default;
18
20 UniqueOwnerPointer& operator=(UniqueOwnerPointer const&) = delete;
21
23 UniqueOwnerPointer& operator=(UniqueOwnerPointer&&) = default;
24
25 UniqueOwnerPointer(std::unique_ptr<T> ptr)
26 : mEnableNonOwnerReferences(std::make_unique<Bedrock::EnableNonOwnerReferences>(*ptr)),
27 mValue(std::move(ptr)) {}
28
29 UniqueOwnerPointer& operator=(nullptr_t) { reset(); }
30
31 T* get() const { return mValue.get(); }
32 T* operator->() const { return get(); }
33 T& operator*() const { return *get(); }
34
35 bool isValid() const { return mValue != nullptr; }
36 explicit operator bool() const { return isValid(); }
37
38 void reset() {
39 mEnableNonOwnerReferences.reset();
40 mValue.reset();
41 }
42
43 bool operator==(UniqueOwnerPointer const& other) const { return mValue == other.mValue; }
44 bool operator==(nullptr_t) const { return mValue == nullptr; }
45};
46
47} // namespace Bedrock
Definition UniqueOwnerPointer.h:9