diff --git a/example.cpp b/example.cpp index b7b3195..fe39e85 100644 --- a/example.cpp +++ b/example.cpp @@ -2,6 +2,7 @@ #include signed main() { + dbg(); dbg("hi"); string s="world"; dbg(s); @@ -18,5 +19,4 @@ 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/soi-dbg.hpp b/include/bits/soi-dbg.hpp index 8e32188..0e7d202 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,50 +36,48 @@ 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 -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)}; - } +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)}; } - 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::", ""); @@ -200,38 +198,42 @@ template T &&identity(T &&t) { return std::forward(t); } #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_() \ +#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__) +#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