From 57d0033c6bb45dc02c7c4bec170d3cd655191a26 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Wed, 1 Mar 2023 16:20:26 +0700 Subject: [PATCH] remove virtual dtors --- .clang-tidy | 23 ------ .gitignore | 8 +- .vscode/settings.json | 22 +---- headers/.clang-format | 33 ++++++++ headers/.clangd | 29 +++++++ headers/defer.hpp/defer.hpp | 156 +++++++++++++++++------------------- untests/.clang-format | 1 + untests/.clang-tidy | 18 ----- untests/.clangd | 10 +++ 9 files changed, 155 insertions(+), 145 deletions(-) delete mode 100644 .clang-tidy create mode 100644 headers/.clang-format create mode 100644 headers/.clangd create mode 100644 untests/.clang-format delete mode 100644 untests/.clang-tidy create mode 100644 untests/.clangd diff --git a/.clang-tidy b/.clang-tidy deleted file mode 100644 index 1e05e55..0000000 --- a/.clang-tidy +++ /dev/null @@ -1,23 +0,0 @@ ---- -Checks: '-*, - - bugprone-*, - - clang-analyzer-*, - - concurrency-*, - - cppcoreguidelines-*, - -cppcoreguidelines-macro-usage, - - modernize-*, - -modernize-use-trailing-return-type, - - performance-*, - - portability-*, - - readability-*, - -readability-identifier-length, - ' -... diff --git a/.gitignore b/.gitignore index 94e5b13..7f8bba3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -build/* -install/* -.clangd/* -CMakeLists.txt.user +.DS_Store +/.cdb/* +/build/* +/install/* \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 966d80c..0c826be 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,29 +1,15 @@ { - "[cpp]": { - "files.encoding": "utf8", - "files.insertFinalNewline": true, - "files.trimFinalNewlines": true, - "files.trimTrailingWhitespace": true + "[c][cpp][json][jsonc][python][yaml]": { + "editor.formatOnSave": true, }, - "[cmake]": { - "files.encoding": "utf8", - "files.insertFinalNewline": true, - "files.trimFinalNewlines": true, - "files.trimTrailingWhitespace": true - }, - "[python]": { + "[c][cmake][cpp][json][jsonc][markdown][python][yaml]": { "files.encoding": "utf8", "files.insertFinalNewline": true, "files.trimFinalNewlines": true, "files.trimTrailingWhitespace": true }, "clangd.arguments": [ - "--all-scopes-completion", - "--background-index", - "--clang-tidy", - "--compile-commands-dir=${workspaceFolder}/.clangd", - "--completion-style=detailed", "--header-insertion=never" ], - "cmake.copyCompileCommands": "${workspaceFolder}/.clangd/compile_commands.json" + "cmake.copyCompileCommands": "${workspaceFolder}/.cdb/compile_commands.json" } diff --git a/headers/.clang-format b/headers/.clang-format new file mode 100644 index 0000000..6c67fc1 --- /dev/null +++ b/headers/.clang-format @@ -0,0 +1,33 @@ +Language: Cpp +BasedOnStyle: LLVM + +AccessModifierOffset: -4 +AlignAfterOpenBracket: BlockIndent +AlignEscapedNewlines: DontAlign +AlignOperands: AlignAfterOperator +AllowAllArgumentsOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortFunctionsOnASingleLine: Empty +AlwaysBreakTemplateDeclarations: Yes +BinPackArguments: false +BinPackParameters: false +BraceWrapping: { AfterNamespace: true } +BreakBeforeBinaryOperators: NonAssignment +BreakBeforeBraces: Custom +BreakConstructorInitializers: BeforeComma +BreakInheritanceList: BeforeComma +ColumnLimit: 130 +ConstructorInitializerIndentWidth: 0 +FixNamespaceComments: false +IndentPPDirectives: AfterHash +IndentWidth: 4 +LambdaBodyIndentation: OuterScope +NamespaceIndentation: All +PackConstructorInitializers: Never +PenaltyBreakAssignment: 100 +PenaltyReturnTypeOnItsOwnLine: 200 +PointerAlignment: Left +PPIndentWidth: 4 +SeparateDefinitionBlocks: Always +SpacesInAngles: Leave +SpacesInConditionalStatement: true diff --git a/headers/.clangd b/headers/.clangd new file mode 100644 index 0000000..f65dfe2 --- /dev/null +++ b/headers/.clangd @@ -0,0 +1,29 @@ +Diagnostics: + ClangTidy: + Add: + - bugprone-* + - clang-analyzer-* + - concurrency-* + - cppcoreguidelines-* + - misc-* + - modernize-* + - performance-* + - portability-* + - readability-* + Remove: + - bugprone-easily-swappable-parameters + - bugprone-macro-parentheses + - cppcoreguidelines-macro-usage + - cppcoreguidelines-non-private-member-variables-in-classes + - misc-no-recursion + - misc-non-private-member-variables-in-classes + - misc-unused-using-decls + - modernize-use-trailing-return-type + - readability-identifier-length + - readability-named-parameter + - readability-redundant-access-specifiers + - readability-simplify-boolean-expr + - readability-use-anyofallof + +CompileFlags: + CompilationDatabase: ../.cdb diff --git a/headers/defer.hpp/defer.hpp b/headers/defer.hpp/defer.hpp index 289839c..5038a3e 100644 --- a/headers/defer.hpp/defer.hpp +++ b/headers/defer.hpp/defer.hpp @@ -16,54 +16,70 @@ namespace defer_hpp namespace impl { template < typename F, typename... Args > - class defer_impl { + class base_defer_t { public: - defer_impl() = delete; - defer_impl(defer_impl&&) = delete; - defer_impl(const defer_impl&) = delete; - defer_impl& operator=(defer_impl&&) = delete; - defer_impl& operator=(const defer_impl&) = delete; + base_defer_t() = delete; + base_defer_t(base_defer_t&&) = delete; + base_defer_t(const base_defer_t&) = delete; + base_defer_t& operator=(base_defer_t&&) = delete; + base_defer_t& operator=(const base_defer_t&) = delete; template < typename UF > - explicit defer_impl( - UF&& f, - std::tuple&& args) - : f_(std::forward(f)) - , args_(std::move(args)) {} - - virtual ~defer_impl() noexcept { - if ( !dismissed_ ) { - std::apply(std::move(f_), std::move(args_)); - } - } + explicit base_defer_t(UF&& f, std::tuple&& args) + : f_{std::forward(f)} + , args_{std::move(args)} {} void dismiss() noexcept { dismissed_ = true; } + protected: + ~base_defer_t() noexcept { + if ( !dismissed_ ) { + std::apply(std::move(f_), std::move(args_)); + } + } + private: F f_; std::tuple args_; bool dismissed_{}; }; + } + namespace impl + { template < typename F, typename... Args > - class error_defer_impl final : public defer_impl { + class defer_t final : public base_defer_t { public: - error_defer_impl() = delete; - error_defer_impl(error_defer_impl&&) = delete; - error_defer_impl(const error_defer_impl&) = delete; - error_defer_impl& operator=(error_defer_impl&&) = delete; - error_defer_impl& operator=(const error_defer_impl&) = delete; + defer_t() = delete; + defer_t(defer_t&&) = delete; + defer_t(const defer_t&) = delete; + defer_t& operator=(defer_t&&) = delete; + defer_t& operator=(const defer_t&) = delete; template < typename UF > - explicit error_defer_impl( - UF&& f, - std::tuple&& args) - : defer_impl(std::forward(f), std::move(args)) - , exceptions_(std::uncaught_exceptions()) {} + explicit defer_t(UF&& f, std::tuple&& args) + : base_defer_t{std::forward(f), std::move(args)} {} - ~error_defer_impl() noexcept final { + ~defer_t() noexcept = default; + }; + + template < typename F, typename... Args > + class error_defer_t final : public base_defer_t { + public: + error_defer_t() = delete; + error_defer_t(error_defer_t&&) = delete; + error_defer_t(const error_defer_t&) = delete; + error_defer_t& operator=(error_defer_t&&) = delete; + error_defer_t& operator=(const error_defer_t&) = delete; + + template < typename UF > + explicit error_defer_t(UF&& f, std::tuple&& args) + : base_defer_t{std::forward(f), std::move(args)} + , exceptions_{std::uncaught_exceptions()} {} + + ~error_defer_t() noexcept { if ( exceptions_ == std::uncaught_exceptions() ) { this->dismiss(); } @@ -74,22 +90,20 @@ namespace defer_hpp }; template < typename F, typename... Args > - class return_defer_impl final : public defer_impl { + class return_defer_t final : public base_defer_t { public: - return_defer_impl() = delete; - return_defer_impl(return_defer_impl&&) = delete; - return_defer_impl(const return_defer_impl&) = delete; - return_defer_impl& operator=(return_defer_impl&&) = delete; - return_defer_impl& operator=(const return_defer_impl&) = delete; + return_defer_t() = delete; + return_defer_t(return_defer_t&&) = delete; + return_defer_t(const return_defer_t&) = delete; + return_defer_t& operator=(return_defer_t&&) = delete; + return_defer_t& operator=(const return_defer_t&) = delete; template < typename UF > - explicit return_defer_impl( - UF&& f, - std::tuple&& args) - : defer_impl(std::forward(f), std::move(args)) - , exceptions_(std::uncaught_exceptions()) {} + explicit return_defer_t(UF&& f, std::tuple&& args) + : base_defer_t{std::forward(f), std::move(args)} + , exceptions_{std::uncaught_exceptions()} {} - ~return_defer_impl() noexcept final { + ~return_defer_t() noexcept { if ( exceptions_ != std::uncaught_exceptions() ) { this->dismiss(); } @@ -102,60 +116,38 @@ namespace defer_hpp template < typename F, typename... Args > auto make_defer(F&& f, Args&&... args) { - using defer_t = impl::defer_impl< - std::decay_t, - std::decay_t...>; - return defer_t( - std::forward(f), - std::make_tuple(std::forward(args)...)); + using defer_t = impl::defer_t, std::decay_t...>; + return defer_t{std::forward(f), std::make_tuple(std::forward(args)...)}; } template < typename F, typename... Args > auto make_error_defer(F&& f, Args&&... args) { - using defer_t = impl::error_defer_impl< - std::decay_t, - std::decay_t...>; - return defer_t( - std::forward(f), - std::make_tuple(std::forward(args)...)); + using defer_t = impl::error_defer_t, std::decay_t...>; + return defer_t{std::forward(f), std::make_tuple(std::forward(args)...)}; } template < typename F, typename... Args > auto make_return_defer(F&& f, Args&&... args) { - using defer_t = impl::return_defer_impl< - std::decay_t, - std::decay_t...>; - return defer_t( - std::forward(f), - std::make_tuple(std::forward(args)...)); + using defer_t = impl::return_defer_t, std::decay_t...>; + return defer_t{std::forward(f), std::make_tuple(std::forward(args)...)}; } } #define DEFER_HPP_IMPL_PP_CAT(x, y) DEFER_HPP_IMPL_PP_CAT_I(x, y) -#define DEFER_HPP_IMPL_PP_CAT_I(x, y) x ## y +#define DEFER_HPP_IMPL_PP_CAT_I(x, y) x##y #ifdef __COUNTER__ - #define DEFER_HPP(...)\ - auto DEFER_HPP_IMPL_PP_CAT(generated_defer_, __COUNTER__) =\ - ::defer_hpp::make_defer(__VA_ARGS__) - - #define ERROR_DEFER_HPP(...)\ - auto DEFER_HPP_IMPL_PP_CAT(generated_error_defer_, __COUNTER__) =\ - ::defer_hpp::make_error_defer(__VA_ARGS__) - - #define RETURN_DEFER_HPP(...)\ - auto DEFER_HPP_IMPL_PP_CAT(generated_return_defer_, __COUNTER__) =\ - ::defer_hpp::make_return_defer(__VA_ARGS__) +# define DEFER_HPP(...) \ + auto DEFER_HPP_IMPL_PP_CAT(defer_hpp_generated_defer_, __COUNTER__) { ::defer_hpp::make_defer(__VA_ARGS__) } +# define ERROR_DEFER_HPP(...) \ + auto DEFER_HPP_IMPL_PP_CAT(defer_hpp_generated_error_defer_, __COUNTER__) { ::defer_hpp::make_error_defer(__VA_ARGS__) } +# define RETURN_DEFER_HPP(...) \ + auto DEFER_HPP_IMPL_PP_CAT(defer_hpp_generated_return_defer_, __COUNTER__) { ::defer_hpp::make_return_defer(__VA_ARGS__) } #else - #define DEFER_HPP(...)\ - auto DEFER_HPP_IMPL_PP_CAT(generated_defer_, __LINE__) =\ - ::defer_hpp::make_defer(__VA_ARGS__) - - #define ERROR_DEFER_HPP(...)\ - auto DEFER_HPP_IMPL_PP_CAT(generated_error_defer_, __LINE__) =\ - ::defer_hpp::make_error_defer(__VA_ARGS__) - - #define RETURN_DEFER_HPP(...)\ - auto DEFER_HPP_IMPL_PP_CAT(generated_return_defer_, __LINE__) =\ - ::defer_hpp::make_return_defer(__VA_ARGS__) +# define DEFER_HPP(...) \ + auto DEFER_HPP_IMPL_PP_CAT(defer_hpp_generated_defer_, __LINE__) { ::defer_hpp::make_defer(__VA_ARGS__) } +# define ERROR_DEFER_HPP(...) \ + auto DEFER_HPP_IMPL_PP_CAT(defer_hpp_generated_error_defer_, __LINE__) { ::defer_hpp::make_error_defer(__VA_ARGS__) } +# define RETURN_DEFER_HPP(...) \ + auto DEFER_HPP_IMPL_PP_CAT(defer_hpp_generated_return_defer_, __LINE__) { ::defer_hpp::make_return_defer(__VA_ARGS__) } #endif diff --git a/untests/.clang-format b/untests/.clang-format new file mode 100644 index 0000000..e384528 --- /dev/null +++ b/untests/.clang-format @@ -0,0 +1 @@ +DisableFormat: true diff --git a/untests/.clang-tidy b/untests/.clang-tidy deleted file mode 100644 index fdbc6cc..0000000 --- a/untests/.clang-tidy +++ /dev/null @@ -1,18 +0,0 @@ ---- -Checks: '-*, - - bugprone-*, - - clang-analyzer-*, - - concurrency-*, - - modernize-*, - -modernize-avoid-c-arrays, - -modernize-use-trailing-return-type, - - performance-*, - - portability-*, - ' -... diff --git a/untests/.clangd b/untests/.clangd new file mode 100644 index 0000000..712abd8 --- /dev/null +++ b/untests/.clangd @@ -0,0 +1,10 @@ +Diagnostics: + ClangTidy: + Remove: + - cppcoreguidelines-* + - modernize-* + - performance-* + - readability-* + +CompileFlags: + CompilationDatabase: ../.cdb