diff options
Diffstat (limited to 'absl/log/internal/nullguard.h')
-rw-r--r-- | absl/log/internal/nullguard.h | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/absl/log/internal/nullguard.h b/absl/log/internal/nullguard.h index 8ea38356..a0ed4ad7 100644 --- a/absl/log/internal/nullguard.h +++ b/absl/log/internal/nullguard.h @@ -27,26 +27,29 @@ #include <array> #include <cstddef> +#include "absl/base/attributes.h" #include "absl/base/config.h" namespace absl { ABSL_NAMESPACE_BEGIN namespace log_internal { +ABSL_CONST_INIT extern const std::array<char, 7> kCharNull; +ABSL_CONST_INIT extern const std::array<signed char, 7> kSignedCharNull; +ABSL_CONST_INIT extern const std::array<unsigned char, 7> kUnsignedCharNull; + template <typename T> struct NullGuard final { static const T& Guard(const T& v) { return v; } }; template <> struct NullGuard<char*> final { - static const char* Guard(const char* v) { return v ? v : "(null)"; } + static const char* Guard(const char* v) { return v ? v : kCharNull.data(); } }; template <> struct NullGuard<const char*> final { - static const char* Guard(const char* v) { return v ? v : "(null)"; } + static const char* Guard(const char* v) { return v ? v : kCharNull.data(); } }; -constexpr std::array<signed char, 7> kSignedCharNull{ - {'(', 'n', 'u', 'l', 'l', ')', '\0'}}; template <> struct NullGuard<signed char*> final { static const signed char* Guard(const signed char* v) { @@ -59,8 +62,6 @@ struct NullGuard<const signed char*> final { return v ? v : kSignedCharNull.data(); } }; -constexpr std::array<unsigned char, 7> kUnsignedCharNull{ - {'(', 'n', 'u', 'l', 'l', ')', '\0'}}; template <> struct NullGuard<unsigned char*> final { static const unsigned char* Guard(const unsigned char* v) { @@ -75,7 +76,7 @@ struct NullGuard<const unsigned char*> final { }; template <> struct NullGuard<std::nullptr_t> final { - static const char* Guard(const std::nullptr_t&) { return "(null)"; } + static const char* Guard(const std::nullptr_t&) { return kCharNull.data(); } }; } // namespace log_internal |