summaryrefslogtreecommitdiff
path: root/absl/log/internal/nullguard.h
diff options
context:
space:
mode:
Diffstat (limited to 'absl/log/internal/nullguard.h')
-rw-r--r--absl/log/internal/nullguard.h15
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