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.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/absl/log/internal/nullguard.h b/absl/log/internal/nullguard.h
index 147ca814..8ea38356 100644
--- a/absl/log/internal/nullguard.h
+++ b/absl/log/internal/nullguard.h
@@ -24,6 +24,7 @@
#ifndef ABSL_LOG_INTERNAL_NULLGUARD_H_
#define ABSL_LOG_INTERNAL_NULLGUARD_H_
+#include <array>
#include <cstddef>
#include "absl/base/config.h"
@@ -44,6 +45,34 @@ template <>
struct NullGuard<const char*> final {
static const char* Guard(const char* v) { return v ? v : "(null)"; }
};
+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) {
+ return v ? v : kSignedCharNull.data();
+ }
+};
+template <>
+struct NullGuard<const signed char*> final {
+ static const signed char* Guard(const signed char* v) {
+ 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) {
+ return v ? v : kUnsignedCharNull.data();
+ }
+};
+template <>
+struct NullGuard<const unsigned char*> final {
+ static const unsigned char* Guard(const unsigned char* v) {
+ return v ? v : kUnsignedCharNull.data();
+ }
+};
template <>
struct NullGuard<std::nullptr_t> final {
static const char* Guard(const std::nullptr_t&) { return "(null)"; }