LeviLamina
Loading...
Searching...
No Matches
ResourcePointer.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4#include "mc/external/render_dragon/resources/ResourceBlockTemplate.h"
5
6namespace mce {
7
8template <typename T>
9class ResourcePointer {
10public:
11 std::shared_ptr<ResourceBlockTemplate<T>> mResourcePointerBlock;
12
13 ResourcePointer() = default;
14 explicit ResourcePointer(std::shared_ptr<ResourceBlockTemplate<T>> const& block)
15 : mResourcePointerBlock(block) {} // [inferred]
16
17 virtual ~ResourcePointer() = default;
18
19 bool isValid(ValidityCheckType validityCheckType) const {
20 if (!mResourcePointerBlock) {
21 return false;
22 }
23 return std::get<0>(mResourcePointerBlock->mTrackingBlock.Validate(validityCheckType));
24 }
25
26 T* get() const { return mResourcePointerBlock ? mResourcePointerBlock->get() : nullptr; }
27 T* operator->() const { return get(); }
28 T& operator*() const { return *get(); }
29 explicit operator bool() const { return mResourcePointerBlock != nullptr; }
30 void reset() { mResourcePointerBlock.reset(); }
31
32 ResourcePointer(ResourcePointer const&) = default;
33 ResourcePointer(ResourcePointer&&) = default;
34 ResourcePointer& operator=(ResourcePointer const&) = default;
35 ResourcePointer& operator=(ResourcePointer&&) = default;
36};
37
38} // namespace mce
Definition ResourceBlockTemplate.h:42