From d86a71f79afe0e4dac768f61d6bff690567aca5b Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 24 May 2020 01:40:02 +0800 Subject: ... --- include/cru/common/PreConfig.hpp | 8 ++++++ include/cru/common/SelfResolvable.hpp | 51 ++++++++++++++++++++++++++++++++++ include/cru/common/base.hpp | 2 +- include/cru/common/bitmask.hpp | 2 +- include/cru/common/event.hpp | 4 +-- include/cru/common/logger.hpp | 2 +- include/cru/common/pre_config.hpp | 8 ------ include/cru/common/self_resolvable.hpp | 51 ---------------------------------- 8 files changed, 64 insertions(+), 64 deletions(-) create mode 100644 include/cru/common/PreConfig.hpp create mode 100644 include/cru/common/SelfResolvable.hpp delete mode 100644 include/cru/common/pre_config.hpp delete mode 100644 include/cru/common/self_resolvable.hpp (limited to 'include/cru/common') diff --git a/include/cru/common/PreConfig.hpp b/include/cru/common/PreConfig.hpp new file mode 100644 index 00000000..4bccef1d --- /dev/null +++ b/include/cru/common/PreConfig.hpp @@ -0,0 +1,8 @@ +#pragma once + +#ifdef _MSC_VER +// disable the unnecessary warning about multi-inheritance +#pragma warning(disable : 4250) +#endif + +#define _CRT_SECURE_NO_WARNINGS diff --git a/include/cru/common/SelfResolvable.hpp b/include/cru/common/SelfResolvable.hpp new file mode 100644 index 00000000..94f3ae87 --- /dev/null +++ b/include/cru/common/SelfResolvable.hpp @@ -0,0 +1,51 @@ +#pragma once +#include "PreConfig.hpp" + +#include +#include + +namespace cru { +template +class SelfResolvable; + +template +class ObjectResolver { + friend SelfResolvable; + + private: + ObjectResolver(const std::shared_ptr& 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 resolver_; +}; + +template +class SelfResolvable { + public: + SelfResolvable() : resolver_(new T*(static_cast(this))) {} + SelfResolvable(const SelfResolvable&) = delete; + SelfResolvable& operator=(const SelfResolvable&) = delete; + SelfResolvable(SelfResolvable&&) = delete; + SelfResolvable& operator=(SelfResolvable&&) = delete; + virtual ~SelfResolvable() { (*resolver_) = nullptr; } + + ObjectResolver CreateResolver() { return ObjectResolver(resolver_); } + + private: + std::shared_ptr resolver_; +}; +} // namespace cru diff --git a/include/cru/common/base.hpp b/include/cru/common/base.hpp index 20dd811d..ff7ab31e 100644 --- a/include/cru/common/base.hpp +++ b/include/cru/common/base.hpp @@ -1,5 +1,5 @@ #pragma once -#include "pre_config.hpp" +#include "PreConfig.hpp" #include diff --git a/include/cru/common/bitmask.hpp b/include/cru/common/bitmask.hpp index 95edee13..ddfdc86b 100644 --- a/include/cru/common/bitmask.hpp +++ b/include/cru/common/bitmask.hpp @@ -1,5 +1,5 @@ #pragma once -#include "base.hpp" +#include "Base.hpp" namespace cru { template diff --git a/include/cru/common/event.hpp b/include/cru/common/event.hpp index 8389b38e..377ca7f3 100644 --- a/include/cru/common/event.hpp +++ b/include/cru/common/event.hpp @@ -1,7 +1,7 @@ #pragma once -#include "base.hpp" +#include "Base.hpp" -#include "self_resolvable.hpp" +#include "SelfResolvable.hpp" #include #include diff --git a/include/cru/common/logger.hpp b/include/cru/common/logger.hpp index ab3f2250..bd16678b 100644 --- a/include/cru/common/logger.hpp +++ b/include/cru/common/logger.hpp @@ -1,5 +1,5 @@ #pragma once -#include "cru/common/base.hpp" +#include "cru/common/Base.hpp" #include #include diff --git a/include/cru/common/pre_config.hpp b/include/cru/common/pre_config.hpp deleted file mode 100644 index 4bccef1d..00000000 --- a/include/cru/common/pre_config.hpp +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -#ifdef _MSC_VER -// disable the unnecessary warning about multi-inheritance -#pragma warning(disable : 4250) -#endif - -#define _CRT_SECURE_NO_WARNINGS 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 -#include - -namespace cru { -template -class SelfResolvable; - -template -class ObjectResolver { - friend SelfResolvable; - - private: - ObjectResolver(const std::shared_ptr& 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 resolver_; -}; - -template -class SelfResolvable { - public: - SelfResolvable() : resolver_(new T*(static_cast(this))) {} - SelfResolvable(const SelfResolvable&) = delete; - SelfResolvable& operator=(const SelfResolvable&) = delete; - SelfResolvable(SelfResolvable&&) = delete; - SelfResolvable& operator=(SelfResolvable&&) = delete; - virtual ~SelfResolvable() { (*resolver_) = nullptr; } - - ObjectResolver CreateResolver() { return ObjectResolver(resolver_); } - - private: - std::shared_ptr resolver_; -}; -} // namespace cru -- cgit v1.2.3