diff --git a/example.cpp b/example.cpp index fe39e85..b7b3195 100644 --- a/example.cpp +++ b/example.cpp @@ -2,7 +2,6 @@ #include signed main() { - dbg(); dbg("hi"); string s="world"; dbg(s); @@ -19,4 +18,5 @@ signed main() { dbg(map{{3,"three"},{1,"one"}}); dbg(unordered_map{{3,"three"},{1,"one"}}); dbg(unordered_set{3,1,4}); + dbg(); } diff --git a/include/bits/include-all.hpp b/include/bits/include-all.hpp index b160e83..b75e18e 100644 --- a/include/bits/include-all.hpp +++ b/include/bits/include-all.hpp @@ -28,7 +28,6 @@ #include #include #include -#include #include #include #include diff --git a/include/bits/soi-dbg.hpp b/include/bits/soi-dbg.hpp index 0e7d202..7da31f9 100644 --- a/include/bits/soi-dbg.hpp +++ b/include/bits/soi-dbg.hpp @@ -19,8 +19,8 @@ #ifdef __GNUG__ #include -#include #include +#include #endif #if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) @@ -36,48 +36,50 @@ namespace detail { // ---------------------------------------------------------------------------- // pretty printing the type name -struct string_view { - char const *data; - std::size_t size; + +struct string_view +{ + char const* data; + std::size_t size; }; -template string_view get_name() { - char const *p = __PRETTY_FUNCTION__; - while (*p++ != '=') - ; - for (; *p == ' '; ++p) - ; - char const *p2 = p; - int count = 1; - for (;; ++p2) { - switch (*p2) { - case '[': - ++count; - break; - case ']': - --count; - if (!count) - return {p, std::size_t(p2 - p)}; +template +constexpr string_view get_name() +{ + char const* p = __PRETTY_FUNCTION__; + while (*p++ != '='); + for (; *p == ' '; ++p); + char const* p2 = p; + int count = 1; + for (;;++p2) + { + switch (*p2) + { + case '[': + ++count; + break; + case ']': + --count; + if (!count) + return {p, std::size_t(p2 - p)}; + } } - } - return {}; + return {}; } -std::string replace_all(std::string str, const std::string &from, - const std::string &to) { - size_t start_pos = 0; - while ((start_pos = str.find(from, start_pos)) != std::string::npos) { - str.replace(start_pos, from.length(), to); - start_pos += - to.length(); // Handles case where 'to' is a substring of 'from' - } - return str; +std::string replace_all(std::string str, const std::string& from, const std::string& to) { + size_t start_pos = 0; + while((start_pos = str.find(from, start_pos)) != std::string::npos) { + str.replace(start_pos, from.length(), to); + start_pos += to.length(); // Handles case where 'to' is a substring of 'from' + } + return str; } std::string sanitize_type(std::string s) { auto f = [&](const char *a, const char *b) { - s = replace_all(std::move(s), a, b); - }; + s = replace_all(std::move(s), a, b); + }; f("std::", ""); f("__debug::", ""); f("__cxx11::", ""); @@ -196,44 +198,25 @@ template T &&identity(T &&t) { return std::forward(t); } #define dbg(...) dbg_macro::identity(__VA_ARGS__) #else -#if defined(__clang__) +#define SOI_ARG16(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, ...) _15 +#define SOI_IS_NONEMPTY(...) SOI_ARG16(1, ##__VA_ARGS__, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0) -#define SOI_ARG16(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, \ - _14, _15, ...) \ - _15 -#define SOI_IS_NONEMPTY(...) \ - SOI_ARG16(1, ##__VA_ARGS__, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0) - -#define SOI_DBG_IMPL_0() \ +#define SOI_DBG_IMPL_0() \ soi::detail::dbg_print_status(__FILE__, __LINE__, __func__) +#define SOI_DBG_IMPL_1(...) \ + soi::detail::dbg_print((__VA_ARGS__), \ + soi::detail::sanitized_type_name(), __FILE__, \ + __LINE__, __func__, #__VA_ARGS__) -#define SOI_DBG_IMPL_1(...) \ - soi::detail::dbg_print( \ - (__VA_ARGS__), \ - soi::detail::sanitized_type_name(), __FILE__, \ - __LINE__, __func__, #__VA_ARGS__) - -#else - -#define SOI_IS_NONEMPTY(...) __VA_OPT__(HAS) - -#define SOI_DBG_IMPL_() \ - soi::detail::dbg_print_status(__FILE__, __LINE__, __func__) -#define SOI_DBG_IMPL_HAS(...) \ - soi::detail::dbg_print( \ - (__VA_ARGS__), \ - soi::detail::sanitized_type_name(), __FILE__, \ - __LINE__, __func__, #__VA_ARGS__) - -#endif #define SOI_CAT(a, ...) PRIMITIVE_CAT(a, __VA_ARGS__) -#define SOI_PRIMITIVE_CAT(a, ...) a##__VA_ARGS__ +#define SOI_PRIMITIVE_CAT(a, ...) a ## __VA_ARGS__ -#define SOI_DBG_IMPL(is_nonempty, ...) \ +#define SOI_DBG_IMPL(is_nonempty, ...) \ SOI_PRIMITIVE_CAT(SOI_DBG_IMPL_, is_nonempty)(__VA_ARGS__) -#define dbg(...) SOI_DBG_IMPL(SOI_IS_NONEMPTY(__VA_ARGS__), __VA_ARGS__) +#define dbg(...) \ + SOI_DBG_IMPL(SOI_IS_NONEMPTY(__VA_ARGS__), __VA_ARGS__) #endif #endif // SOI_DBG