From 176813304ea63d5ddc0b27998d76f12bff221b7d Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Thu, 9 Feb 2023 00:08:52 +0700 Subject: [PATCH] overridable assert macro --- develop/singles/headers/meta.hpp/meta_all.hpp | 37 +++++++++++-------- headers/meta.hpp/meta_base/base.hpp | 6 ++- headers/meta.hpp/meta_base/fixed_function.hpp | 12 +++--- headers/meta.hpp/meta_uvalue/uvalue.hpp | 20 +++++----- 4 files changed, 45 insertions(+), 30 deletions(-) diff --git a/develop/singles/headers/meta.hpp/meta_all.hpp b/develop/singles/headers/meta.hpp/meta_all.hpp index 256f768..5e849d7 100644 --- a/develop/singles/headers/meta.hpp/meta_all.hpp +++ b/develop/singles/headers/meta.hpp/meta_all.hpp @@ -7,7 +7,6 @@ #include #include #include -#include #include #include #include @@ -47,6 +46,11 @@ # include #endif +#if !defined(META_HPP_ASSERT) +# include +# define META_HPP_ASSERT(...) assert(__VA_ARGS__) // NOLINT +#endif + namespace meta_hpp::detail { template < typename Enum > @@ -370,7 +374,7 @@ namespace meta_hpp::detail } R operator()(Args... args) const { - assert(vtable_ && "bad function call"); // NOLINT + META_HPP_ASSERT(vtable_ && "bad function call"); return vtable_->call(*this, std::forward(args)...); } @@ -427,14 +431,15 @@ namespace meta_hpp::detail static vtable_t table{ .call{[](const fixed_function& self, Args... args) -> R { - assert(self); // NOLINT + META_HPP_ASSERT(self); const Fp& src = *buffer_cast(self.buffer_); return std::invoke(src, std::forward(args)...); }}, .move{[](fixed_function& from, fixed_function& to) noexcept { - assert(from && !to); // NOLINT + META_HPP_ASSERT(!to); + META_HPP_ASSERT(from); Fp& src = *buffer_cast(from.buffer_); std::construct_at(buffer_cast(to.buffer_), std::move(src)); @@ -445,7 +450,7 @@ namespace meta_hpp::detail }}, .destroy{[](fixed_function& self) { - assert(self); // NOLINT + META_HPP_ASSERT(self); Fp& src = *buffer_cast(self.buffer_); std::destroy_at(&src); @@ -458,7 +463,7 @@ namespace meta_hpp::detail template < typename F, typename Fp = std::decay_t > static void construct(fixed_function& dst, F&& fun) { - assert(!dst); // NOLINT + META_HPP_ASSERT(!dst); static_assert(sizeof(Fp) <= sizeof(buffer_t)); static_assert(alignof(buffer_t) % alignof(Fp) == 0); @@ -8510,7 +8515,7 @@ namespace meta_hpp template < typename T, typename... Args, typename Tp = std::decay_t > static Tp& do_ctor(uvalue& dst, Args&&... args) { - assert(!dst); // NOLINT + META_HPP_ASSERT(!dst); if constexpr ( in_internal_v ) { std::construct_at(storage_cast(dst.storage_), std::forward(args)...); @@ -8528,7 +8533,7 @@ namespace meta_hpp } static void do_move(uvalue&& self, uvalue& to) noexcept { - assert(!to); // NOLINT + META_HPP_ASSERT(!to); auto&& [tag, vtable] = unpack_vtag(self); @@ -8547,7 +8552,7 @@ namespace meta_hpp } static void do_copy(const uvalue& self, uvalue& to) noexcept { - assert(!to); // NOLINT + META_HPP_ASSERT(!to); auto&& [tag, vtable] = unpack_vtag(self); @@ -8609,7 +8614,8 @@ namespace meta_hpp .type = resolve_type(), .move{[](uvalue&& self, uvalue& to) noexcept { - assert(self && !to); // NOLINT + META_HPP_ASSERT(!to); + META_HPP_ASSERT(self); Tp* src = storage_cast(self.storage_); @@ -8624,7 +8630,8 @@ namespace meta_hpp }}, .copy{[](const uvalue& self, uvalue& to) { - assert(self && !to); // NOLINT + META_HPP_ASSERT(!to); + META_HPP_ASSERT(self); const Tp* src = storage_cast(self.storage_); @@ -8638,7 +8645,7 @@ namespace meta_hpp }}, .reset{[](uvalue& self) noexcept { - assert(self); // NOLINT + META_HPP_ASSERT(self); Tp* src = storage_cast(self.storage_); @@ -8801,7 +8808,7 @@ namespace meta_hpp return storage_.external.ptr; } - assert(false); // NOLINT + META_HPP_ASSERT(false); return nullptr; } @@ -8818,7 +8825,7 @@ namespace meta_hpp return storage_.external.ptr; } - assert(false); // NOLINT + META_HPP_ASSERT(false); return nullptr; } @@ -8835,7 +8842,7 @@ namespace meta_hpp return storage_.external.ptr; } - assert(false); // NOLINT + META_HPP_ASSERT(false); return nullptr; } diff --git a/headers/meta.hpp/meta_base/base.hpp b/headers/meta.hpp/meta_base/base.hpp index f08edf7..5ad07ce 100644 --- a/headers/meta.hpp/meta_base/base.hpp +++ b/headers/meta.hpp/meta_base/base.hpp @@ -14,7 +14,6 @@ # define META_HPP_NO_RTTI #endif -#include #include #include #include @@ -49,3 +48,8 @@ # include # include #endif + +#if !defined(META_HPP_ASSERT) +# include +# define META_HPP_ASSERT(...) assert(__VA_ARGS__) // NOLINT +#endif diff --git a/headers/meta.hpp/meta_base/fixed_function.hpp b/headers/meta.hpp/meta_base/fixed_function.hpp index c31a13a..1e26c8e 100644 --- a/headers/meta.hpp/meta_base/fixed_function.hpp +++ b/headers/meta.hpp/meta_base/fixed_function.hpp @@ -7,6 +7,7 @@ #pragma once #include "base.hpp" +#include "exceptions.hpp" namespace meta_hpp::detail { @@ -63,7 +64,7 @@ namespace meta_hpp::detail } R operator()(Args... args) const { - assert(vtable_ && "bad function call"); // NOLINT + META_HPP_ASSERT(vtable_ && "bad function call"); return vtable_->call(*this, std::forward(args)...); } @@ -120,14 +121,15 @@ namespace meta_hpp::detail static vtable_t table{ .call{[](const fixed_function& self, Args... args) -> R { - assert(self); // NOLINT + META_HPP_ASSERT(self); const Fp& src = *buffer_cast(self.buffer_); return std::invoke(src, std::forward(args)...); }}, .move{[](fixed_function& from, fixed_function& to) noexcept { - assert(from && !to); // NOLINT + META_HPP_ASSERT(!to); + META_HPP_ASSERT(from); Fp& src = *buffer_cast(from.buffer_); std::construct_at(buffer_cast(to.buffer_), std::move(src)); @@ -138,7 +140,7 @@ namespace meta_hpp::detail }}, .destroy{[](fixed_function& self) { - assert(self); // NOLINT + META_HPP_ASSERT(self); Fp& src = *buffer_cast(self.buffer_); std::destroy_at(&src); @@ -151,7 +153,7 @@ namespace meta_hpp::detail template < typename F, typename Fp = std::decay_t > static void construct(fixed_function& dst, F&& fun) { - assert(!dst); // NOLINT + META_HPP_ASSERT(!dst); static_assert(sizeof(Fp) <= sizeof(buffer_t)); static_assert(alignof(buffer_t) % alignof(Fp) == 0); diff --git a/headers/meta.hpp/meta_uvalue/uvalue.hpp b/headers/meta.hpp/meta_uvalue/uvalue.hpp index 3ef2618..8e60695 100644 --- a/headers/meta.hpp/meta_uvalue/uvalue.hpp +++ b/headers/meta.hpp/meta_uvalue/uvalue.hpp @@ -72,7 +72,7 @@ namespace meta_hpp template < typename T, typename... Args, typename Tp = std::decay_t > static Tp& do_ctor(uvalue& dst, Args&&... args) { - assert(!dst); // NOLINT + META_HPP_ASSERT(!dst); if constexpr ( in_internal_v ) { std::construct_at(storage_cast(dst.storage_), std::forward(args)...); @@ -90,7 +90,7 @@ namespace meta_hpp } static void do_move(uvalue&& self, uvalue& to) noexcept { - assert(!to); // NOLINT + META_HPP_ASSERT(!to); auto&& [tag, vtable] = unpack_vtag(self); @@ -109,7 +109,7 @@ namespace meta_hpp } static void do_copy(const uvalue& self, uvalue& to) noexcept { - assert(!to); // NOLINT + META_HPP_ASSERT(!to); auto&& [tag, vtable] = unpack_vtag(self); @@ -171,7 +171,8 @@ namespace meta_hpp .type = resolve_type(), .move{[](uvalue&& self, uvalue& to) noexcept { - assert(self && !to); // NOLINT + META_HPP_ASSERT(!to); + META_HPP_ASSERT(self); Tp* src = storage_cast(self.storage_); @@ -186,7 +187,8 @@ namespace meta_hpp }}, .copy{[](const uvalue& self, uvalue& to) { - assert(self && !to); // NOLINT + META_HPP_ASSERT(!to); + META_HPP_ASSERT(self); const Tp* src = storage_cast(self.storage_); @@ -200,7 +202,7 @@ namespace meta_hpp }}, .reset{[](uvalue& self) noexcept { - assert(self); // NOLINT + META_HPP_ASSERT(self); Tp* src = storage_cast(self.storage_); @@ -363,7 +365,7 @@ namespace meta_hpp return storage_.external.ptr; } - assert(false); // NOLINT + META_HPP_ASSERT(false); return nullptr; } @@ -380,7 +382,7 @@ namespace meta_hpp return storage_.external.ptr; } - assert(false); // NOLINT + META_HPP_ASSERT(false); return nullptr; } @@ -397,7 +399,7 @@ namespace meta_hpp return storage_.external.ptr; } - assert(false); // NOLINT + META_HPP_ASSERT(false); return nullptr; }