aboutsummaryrefslogtreecommitdiff
path: root/include/cru/common/self_resolvable.hpp
diff options
context:
space:
mode:
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