File indexing completed on 2025-12-16 09:40:53
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #ifndef ABSL_LOG_INTERNAL_NULLGUARD_H_
0025 #define ABSL_LOG_INTERNAL_NULLGUARD_H_
0026
0027 #include <array>
0028 #include <cstddef>
0029
0030 #include "absl/base/attributes.h"
0031 #include "absl/base/config.h"
0032
0033 namespace absl {
0034 ABSL_NAMESPACE_BEGIN
0035 namespace log_internal {
0036
0037 ABSL_CONST_INIT ABSL_DLL extern const std::array<char, 7> kCharNull;
0038 ABSL_CONST_INIT ABSL_DLL extern const std::array<signed char, 7>
0039 kSignedCharNull;
0040 ABSL_CONST_INIT ABSL_DLL extern const std::array<unsigned char, 7>
0041 kUnsignedCharNull;
0042
0043 template <typename T>
0044 struct NullGuard final {
0045 static const T& Guard(const T& v) { return v; }
0046 };
0047 template <>
0048 struct NullGuard<char*> final {
0049 static const char* Guard(const char* v) { return v ? v : kCharNull.data(); }
0050 };
0051 template <>
0052 struct NullGuard<const char*> final {
0053 static const char* Guard(const char* v) { return v ? v : kCharNull.data(); }
0054 };
0055 template <>
0056 struct NullGuard<signed char*> final {
0057 static const signed char* Guard(const signed char* v) {
0058 return v ? v : kSignedCharNull.data();
0059 }
0060 };
0061 template <>
0062 struct NullGuard<const signed char*> final {
0063 static const signed char* Guard(const signed char* v) {
0064 return v ? v : kSignedCharNull.data();
0065 }
0066 };
0067 template <>
0068 struct NullGuard<unsigned char*> final {
0069 static const unsigned char* Guard(const unsigned char* v) {
0070 return v ? v : kUnsignedCharNull.data();
0071 }
0072 };
0073 template <>
0074 struct NullGuard<const unsigned char*> final {
0075 static const unsigned char* Guard(const unsigned char* v) {
0076 return v ? v : kUnsignedCharNull.data();
0077 }
0078 };
0079 template <>
0080 struct NullGuard<std::nullptr_t> final {
0081 static const char* Guard(const std::nullptr_t&) { return kCharNull.data(); }
0082 };
0083
0084 }
0085 ABSL_NAMESPACE_END
0086 }
0087
0088 #endif