aboutsummaryrefslogtreecommitdiff
path: root/include/cru/common/self_resolvable.hpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-05-24 01:40:02 +0800
committercrupest <crupest@outlook.com>2020-05-24 01:40:02 +0800
commitd86a71f79afe0e4dac768f61d6bff690567aca5b (patch)
tree4957e9a64c77680deb07201fbd879bf036616dae /include/cru/common/self_resolvable.hpp
parentf3a8fd608a9776ef0a5f547da918a32cf6074060 (diff)
downloadcru-d86a71f79afe0e4dac768f61d6bff690567aca5b.tar.gz
cru-d86a71f79afe0e4dac768f61d6bff690567aca5b.tar.bz2
cru-d86a71f79afe0e4dac768f61d6bff690567aca5b.zip
...
Diffstat (limited to 'include/cru/common/self_resolvable.hpp')
-rw-r--r--include/cru/common/self_resolvable.hpp51
1 files changed, 0 insertions, 51 deletions
diff --git a/include/cru/common/self_resolvable.hpp b/include/cru/common/self_resolvable.hpp
deleted file mode 100644
index 19c06a1b..00000000
--- a/include/cru/common/self_resolvable.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-#pragma once
-#include "pre_config.hpp"
-
-#include <memory>
-#include <type_traits>
-
-namespace cru {
-template <typename T>
-class SelfResolvable;
-
-template <typename T>
-class ObjectResolver {
- friend SelfResolvable<T>;
-
- private:
- ObjectResolver(const std::shared_ptr<T*>& resolver) : resolver_(resolver) {}
-
- public:
- ObjectResolver(const ObjectResolver&) = default;
- ObjectResolver& operator=(const ObjectResolver&) = default;
- ObjectResolver(ObjectResolver&&) = default;
- ObjectResolver& operator=(ObjectResolver&&) = default;
- ~ObjectResolver() = default;
-
- T* Resolve() const {
- // resolver_ is null only when this has been moved.
- // You shouldn't resolve a moved resolver. So assert it.
- Expects(resolver_);
- return *resolver_;
- }
-
- private:
- std::shared_ptr<T*> resolver_;
-};
-
-template <typename T>
-class SelfResolvable {
- public:
- SelfResolvable() : resolver_(new T*(static_cast<T*>(this))) {}
- SelfResolvable(const SelfResolvable&) = delete;
- SelfResolvable& operator=(const SelfResolvable&) = delete;
- SelfResolvable(SelfResolvable&&) = delete;
- SelfResolvable& operator=(SelfResolvable&&) = delete;
- virtual ~SelfResolvable() { (*resolver_) = nullptr; }
-
- ObjectResolver<T> CreateResolver() { return ObjectResolver<T>(resolver_); }
-
- private:
- std::shared_ptr<T*> resolver_;
-};
-} // namespace cru