From 168c9a009eb68697c1b8328cfbf3a1a6ccae48f6 Mon Sep 17 00:00:00 2001 From: crupest Date: Tue, 29 Dec 2020 22:52:02 +0800 Subject: import(life): ... --- works/life/cpp-practicum/Base.hpp | 63 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 works/life/cpp-practicum/Base.hpp (limited to 'works/life/cpp-practicum/Base.hpp') diff --git a/works/life/cpp-practicum/Base.hpp b/works/life/cpp-practicum/Base.hpp new file mode 100644 index 0000000..f26b81f --- /dev/null +++ b/works/life/cpp-practicum/Base.hpp @@ -0,0 +1,63 @@ +#pragma once + +#include +#include +// #include +#include + +// Now we have no gsl but we need gsl::index +namespace gsl { +using index = std::ptrdiff_t; +} + +#define CRU_UNUSED(entity) static_cast(entity); + +#define CRU__CONCAT(a, b) a##b +#define CRU_MAKE_UNICODE_LITERAL(str) CRU__CONCAT(u, #str) + +#define CRU_DEFAULT_COPY(classname) \ + classname(const classname &) = default; \ + classname &operator=(const classname &) = default; + +#define CRU_DEFAULT_MOVE(classname) \ + classname(classname &&) = default; \ + classname &operator=(classname &&) = default; + +#define CRU_DELETE_COPY(classname) \ + classname(const classname &) = delete; \ + classname &operator=(const classname &) = delete; + +#define CRU_DELETE_MOVE(classname) \ + classname(classname &&) = delete; \ + classname &operator=(classname &&) = delete; + +namespace cru { +class Object { +public: + Object() = default; + CRU_DEFAULT_COPY(Object) + CRU_DEFAULT_MOVE(Object) + virtual ~Object() = default; +}; + +struct Interface { + Interface() = default; + CRU_DELETE_COPY(Interface) + CRU_DELETE_MOVE(Interface) + virtual ~Interface() = default; +}; + +[[noreturn]] inline void UnreachableCode() { std::terminate(); } + +using Index = gsl::index; + +// https://www.boost.org/doc/libs/1_54_0/doc/html/hash/reference.html#boost.hash_combine +template inline void hash_combine(std::size_t &s, const T &v) { + std::hash h; + s ^= h(v) + 0x9e3779b9 + (s << 6) + (s >> 2); +} + +#define CRU_DEFINE_CLASS_LOG_TAG(tag) \ +private: \ + constexpr static std::u16string_view log_tag = tag; +} // namespace cru -- cgit v1.2.3