abseil-cpp/absl/strings/internal/str_format/extension.h
Go to the documentation of this file.
1 //
2 // Copyright 2017 The Abseil Authors.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // https://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16 #ifndef ABSL_STRINGS_INTERNAL_STR_FORMAT_EXTENSION_H_
17 #define ABSL_STRINGS_INTERNAL_STR_FORMAT_EXTENSION_H_
18 
19 #include <limits.h>
20 
21 #include <cstddef>
22 #include <cstdint>
23 #include <cstring>
24 #include <ostream>
25 
26 #include "absl/base/config.h"
27 #include "absl/base/port.h"
28 #include "absl/meta/type_traits.h"
29 #include "absl/strings/internal/str_format/output.h"
30 #include "absl/strings/string_view.h"
31 
32 namespace absl {
34 
35 enum class FormatConversionChar : uint8_t;
37 
39 
41  public:
42  // Implicitly convert from any type that provides the hook function as
43  // described above.
44  template <typename T, decltype(str_format_internal::InvokeFlush(
45  std::declval<T*>(), string_view()))* = nullptr>
46  FormatRawSinkImpl(T* raw) // NOLINT
47  : sink_(raw), write_(&FormatRawSinkImpl::Flush<T>) {}
48 
49  void Write(string_view s) { write_(sink_, s); }
50 
51  template <typename T>
53  return s.sink_;
54  }
55 
56  private:
57  template <typename T>
58  static void Flush(void* r, string_view s) {
59  str_format_internal::InvokeFlush(static_cast<T*>(r), s);
60  }
61 
62  void* sink_;
63  void (*write_)(void*, string_view);
64 };
65 
66 // An abstraction to which conversions write their string data.
68  public:
69  explicit FormatSinkImpl(FormatRawSinkImpl raw) : raw_(raw) {}
70 
71  ~FormatSinkImpl() { Flush(); }
72 
73  void Flush() {
74  raw_.Write(string_view(buf_, static_cast<size_t>(pos_ - buf_)));
75  pos_ = buf_;
76  }
77 
78  void Append(size_t n, char c) {
79  if (n == 0) return;
80  size_ += n;
81  auto raw_append = [&](size_t count) {
82  memset(pos_, c, count);
83  pos_ += count;
84  };
85  while (n > Avail()) {
86  n -= Avail();
87  if (Avail() > 0) {
88  raw_append(Avail());
89  }
90  Flush();
91  }
92  raw_append(n);
93  }
94 
96  size_t n = v.size();
97  if (n == 0) return;
98  size_ += n;
99  if (n >= Avail()) {
100  Flush();
101  raw_.Write(v);
102  return;
103  }
104  memcpy(pos_, v.data(), n);
105  pos_ += n;
106  }
107 
108  size_t size() const { return size_; }
109 
110  // Put 'v' to 'sink' with specified width, precision, and left flag.
111  bool PutPaddedString(string_view v, int width, int precision, bool left);
112 
113  template <typename T>
114  T Wrap() {
115  return T(this);
116  }
117 
118  template <typename T>
119  static FormatSinkImpl* Extract(T* s) {
120  return s->sink_;
121  }
122 
123  private:
124  size_t Avail() const {
125  return static_cast<size_t>(buf_ + sizeof(buf_) - pos_);
126  }
127 
129  size_t size_ = 0;
130  char* pos_ = buf_;
131  char buf_[1024];
132 };
133 
134 enum class Flags : uint8_t {
135  kBasic = 0,
136  kLeft = 1 << 0,
137  kShowPos = 1 << 1,
138  kSignCol = 1 << 2,
139  kAlt = 1 << 3,
140  kZero = 1 << 4,
141  // This is not a real flag. It just exists to turn off kBasic when no other
142  // flags are set. This is for when width/precision are specified.
143  kNonBasic = 1 << 5,
144 };
145 
146 constexpr Flags operator|(Flags a, Flags b) {
147  return static_cast<Flags>(static_cast<uint8_t>(a) | static_cast<uint8_t>(b));
148 }
149 
150 constexpr bool FlagsContains(Flags haystack, Flags needle) {
151  return (static_cast<uint8_t>(haystack) & static_cast<uint8_t>(needle)) ==
152  static_cast<uint8_t>(needle);
153 }
154 
156 
157 inline std::ostream& operator<<(std::ostream& os, Flags v) {
158  return os << FlagsToString(v);
159 }
160 
161 // clang-format off
162 #define ABSL_INTERNAL_CONVERSION_CHARS_EXPAND_(X_VAL, X_SEP) \
163  /* text */ \
164  X_VAL(c) X_SEP X_VAL(s) X_SEP \
165  /* ints */ \
166  X_VAL(d) X_SEP X_VAL(i) X_SEP X_VAL(o) X_SEP \
167  X_VAL(u) X_SEP X_VAL(x) X_SEP X_VAL(X) X_SEP \
168  /* floats */ \
169  X_VAL(f) X_SEP X_VAL(F) X_SEP X_VAL(e) X_SEP X_VAL(E) X_SEP \
170  X_VAL(g) X_SEP X_VAL(G) X_SEP X_VAL(a) X_SEP X_VAL(A) X_SEP \
171  /* misc */ \
172  X_VAL(n) X_SEP X_VAL(p)
173 // clang-format on
174 
175 // This type should not be referenced, it exists only to provide labels
176 // internally that match the values declared in FormatConversionChar in
177 // str_format.h. This is meant to allow internal libraries to use the same
178 // declared interface type as the public interface
179 // (absl::StrFormatConversionChar) while keeping the definition in a public
180 // header.
181 // Internal libraries should use the form
182 // `FormatConversionCharInternal::c`, `FormatConversionCharInternal::kNone` for
183 // comparisons. Use in switch statements is not recommended due to a bug in how
184 // gcc 4.9 -Wswitch handles declared but undefined enums.
186  FormatConversionCharInternal() = delete;
187 
188  private:
189  // clang-format off
190  enum class Enum : uint8_t {
191  c, s, // text
192  d, i, o, u, x, X, // int
193  f, F, e, E, g, G, a, A, // float
194  n, p, // misc
195  kNone
196  };
197  // clang-format on
198  public:
199 #define ABSL_INTERNAL_X_VAL(id) \
200  static constexpr FormatConversionChar id = \
201  static_cast<FormatConversionChar>(Enum::id);
203 #undef ABSL_INTERNAL_X_VAL
204  static constexpr FormatConversionChar kNone =
205  static_cast<FormatConversionChar>(Enum::kNone);
206 };
207 // clang-format on
208 
210  switch (c) {
211 #define ABSL_INTERNAL_X_VAL(id) \
212  case #id[0]: \
213  return FormatConversionCharInternal::id;
215 #undef ABSL_INTERNAL_X_VAL
216  }
217  return FormatConversionCharInternal::kNone;
218 }
219 
223  c == FormatConversionCharInternal::E ||
226  return true;
227  } else {
228  return false;
229  }
230 }
231 
234  c == FormatConversionCharInternal::e ||
238  c == FormatConversionCharInternal::E ||
241  return true;
242  } else {
243  return false;
244  }
245 }
246 
248  if (c == FormatConversionCharInternal::kNone) {
249  return '\0';
250 
251 #define ABSL_INTERNAL_X_VAL(e) \
252  } else if (c == FormatConversionCharInternal::e) { \
253  return #e[0];
254 #define ABSL_INTERNAL_X_SEP
257  } else {
258  return '\0';
259  }
260 
261 #undef ABSL_INTERNAL_X_VAL
262 #undef ABSL_INTERNAL_X_SEP
263 }
264 
265 // The associated char.
266 inline std::ostream& operator<<(std::ostream& os, FormatConversionChar v) {
268  if (!c) c = '?';
269  return os << c;
270 }
271 
272 struct FormatConversionSpecImplFriend;
273 
275  public:
276  // Width and precison are not specified, no flags are set.
277  bool is_basic() const { return flags_ == Flags::kBasic; }
278  bool has_left_flag() const { return FlagsContains(flags_, Flags::kLeft); }
279  bool has_show_pos_flag() const {
280  return FlagsContains(flags_, Flags::kShowPos);
281  }
282  bool has_sign_col_flag() const {
283  return FlagsContains(flags_, Flags::kSignCol);
284  }
285  bool has_alt_flag() const { return FlagsContains(flags_, Flags::kAlt); }
286  bool has_zero_flag() const { return FlagsContains(flags_, Flags::kZero); }
287 
289  // Keep this field first in the struct . It generates better code when
290  // accessing it when ConversionSpec is passed by value in registers.
291  static_assert(offsetof(FormatConversionSpecImpl, conv_) == 0, "");
292  return conv_;
293  }
294 
295  // Returns the specified width. If width is unspecfied, it returns a negative
296  // value.
297  int width() const { return width_; }
298  // Returns the specified precision. If precision is unspecfied, it returns a
299  // negative value.
300  int precision() const { return precision_; }
301 
302  template <typename T>
303  T Wrap() {
304  return T(*this);
305  }
306 
307  private:
309  FormatConversionChar conv_ = FormatConversionCharInternal::kNone;
311  int width_;
313 };
314 
317  conv->flags_ = f;
318  }
321  conv->conv_ = c;
322  }
323  static void SetWidth(int w, FormatConversionSpecImpl* conv) {
324  conv->width_ = w;
325  }
327  conv->precision_ = p;
328  }
331  }
332 };
333 
334 // Type safe OR operator.
335 // We need this for two reasons:
336 // 1. operator| on enums makes them decay to integers and the result is an
337 // integer. We need the result to stay as an enum.
338 // 2. We use "enum class" which would not work even if we accepted the decay.
341  return a;
342 }
343 
344 template <typename... CharSet>
346  FormatConversionCharSet a, CharSet... rest) {
347  return static_cast<FormatConversionCharSet>(
348  static_cast<uint64_t>(a) |
349  static_cast<uint64_t>(FormatConversionCharSetUnion(rest...)));
350 }
351 
353  return uint64_t{1} << (1 + static_cast<uint8_t>(c));
354 }
355 
357  return
358 #define ABSL_INTERNAL_CHAR_SET_CASE(c) \
359  conv == #c[0] \
360  ? FormatConversionCharToConvInt(FormatConversionCharInternal::c) \
361  :
363 #undef ABSL_INTERNAL_CHAR_SET_CASE
364  conv == '*'
365  ? 1
366  : 0;
367 }
368 
370  return static_cast<FormatConversionCharSet>(
372 }
373 
375 #define ABSL_INTERNAL_CHAR_SET_CASE(c) \
376  static constexpr FormatConversionCharSet c = \
377  FormatConversionCharToConvValue(#c[0]);
379 #undef ABSL_INTERNAL_CHAR_SET_CASE
380 
381  // Used for width/precision '*' specification.
382  static constexpr FormatConversionCharSet kStar =
384 
388  FormatConversionCharSetUnion(a, e, f, g, A, E, F, G);
390  FormatConversionCharSetUnion(kIntegral, kFloating);
391  static constexpr FormatConversionCharSet kPointer = p;
392 };
393 
394 // Type safe OR operator.
395 // We need this for two reasons:
396 // 1. operator| on enums makes them decay to integers and the result is an
397 // integer. We need the result to stay as an enum.
398 // 2. We use "enum class" which would not work even if we accepted the decay.
402 }
403 
404 // Overloaded conversion functions to support absl::ParsedFormat.
405 // Get a conversion with a single character in it.
407  return static_cast<FormatConversionCharSet>(
409 }
410 
411 // Get a conversion with a single character in it.
414  return c;
415 }
416 
417 template <typename T>
418 void ToFormatConversionCharSet(T) = delete;
419 
420 // Checks whether `c` exists in `set`.
421 constexpr bool Contains(FormatConversionCharSet set, char c) {
422  return (static_cast<uint64_t>(set) &
423  static_cast<uint64_t>(FormatConversionCharToConvValue(c))) != 0;
424 }
425 
426 // Checks whether all the characters in `c` are contained in `set`
429  return (static_cast<uint64_t>(set) & static_cast<uint64_t>(c)) ==
430  static_cast<uint64_t>(c);
431 }
432 
433 // Checks whether all the characters in `c` are contained in `set`
435  return (static_cast<uint64_t>(set) & FormatConversionCharToConvInt(c)) != 0;
436 }
437 
438 // Return capacity - used, clipped to a minimum of 0.
439 inline size_t Excess(size_t used, size_t capacity) {
440  return used < capacity ? capacity - used : 0;
441 }
442 
443 } // namespace str_format_internal
444 
446 } // namespace absl
447 
448 #endif // ABSL_STRINGS_INTERNAL_STR_FORMAT_EXTENSION_H_
absl::str_format_internal::FormatConversionCharToConvValue
constexpr FormatConversionCharSet FormatConversionCharToConvValue(char conv)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:369
absl::str_format_internal::Flags
Definition: bloaty/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h:131
pos_
std::list< value_type >::iterator pos_
Definition: bloaty/third_party/googletest/googlemock/test/gmock-matchers_test.cc:4993
width
int width
Definition: libuv/docs/code/tty-gravity/main.c:10
absl::str_format_internal::FormatConversionSpecImpl::precision_
int precision_
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:312
absl::FormatConversionChar::E
@ E
precision
int precision
Definition: abseil-cpp/absl/strings/internal/str_format/float_conversion.cc:448
X
#define X(c)
absl::str_format_internal::Flags::kSignCol
@ kSignCol
absl::str_format_internal::FormatConversionSpecImpl::has_zero_flag
bool has_zero_flag() const
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:286
memset
return memset(p, 0, total)
absl::str_format_internal::FormatRawSinkImpl::FormatRawSinkImpl
FormatRawSinkImpl(T *raw)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:46
absl::str_format_internal::FormatConversionCharInternal
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:185
absl::str_format_internal::FormatSinkImpl::raw_
FormatRawSinkImpl raw_
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:128
capacity
uint16_t capacity
Definition: protobuf/src/google/protobuf/descriptor.cc:948
absl::str_format_internal::FormatRawSinkImpl::sink_
void * sink_
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:62
absl::str_format_internal::FormatSinkImpl::Extract
static FormatSinkImpl * Extract(T *s)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:119
absl::operator<<
ABSL_NAMESPACE_BEGIN std::ostream & operator<<(std::ostream &os, absl::LogSeverity s)
Definition: abseil-cpp/absl/base/log_severity.cc:24
absl::str_format_internal::FormatConversionSpecImplFriend::SetFlags
static void SetFlags(Flags f, FormatConversionSpecImpl *conv)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:316
absl::str_format_internal::InvokeFlush
auto InvokeFlush(T *out, string_view s) -> decltype(AbslFormatFlush(out, s))
Definition: abseil-cpp/absl/strings/internal/str_format/output.h:89
absl::string_view
Definition: abseil-cpp/absl/strings/string_view.h:167
absl::str_format_internal::FormatRawSinkImpl
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:40
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
absl::str_format_internal::Flags::kShowPos
@ kShowPos
absl::str_format_internal::FormatConversionSpecImpl::conversion_char
FormatConversionChar conversion_char() const
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:288
absl::FormatConversionChar::X
@ X
absl::str_format_internal::FormatSinkImpl::Append
void Append(size_t n, char c)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:78
absl::FormatConversionChar::s
@ s
sink_
FormatSinkImpl * sink_
Definition: abseil-cpp/absl/strings/internal/str_format/bind.cc:146
a
int a
Definition: abseil-cpp/absl/container/internal/hash_policy_traits_test.cc:88
absl::str_format_internal::FormatConversionCharIsUpper
bool FormatConversionCharIsUpper(FormatConversionChar c)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:220
absl::str_format_internal::FormatRawSinkImpl::Flush
static void Flush(void *r, string_view s)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:58
absl::str_format_internal::FormatConversionSpecImplFriend::FlagsToString
static std::string FlagsToString(const FormatConversionSpecImpl &spec)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:329
absl::str_format_internal::FormatConversionSpecImplFriend::SetWidth
static void SetWidth(int w, FormatConversionSpecImpl *conv)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:323
ABSL_NAMESPACE_END
#define ABSL_NAMESPACE_END
Definition: third_party/abseil-cpp/absl/base/config.h:171
uint8_t
unsigned char uint8_t
Definition: stdint-msvc2008.h:78
absl::FormatConversionChar::i
@ i
run_interop_tests.spec
def spec
Definition: run_interop_tests.py:1394
absl::str_format_internal::Excess
size_t Excess(size_t used, size_t capacity)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:439
T
#define T(upbtypeconst, upbtype, ctype, default_value)
Enum
Definition: bloaty/third_party/protobuf/src/google/protobuf/type.pb.h:867
namespace
Definition: namespace.py:1
absl::str_format_internal::FormatSinkImpl::Append
void Append(string_view v)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:95
absl::str_format_internal::ToFormatConversionCharSet
void ToFormatConversionCharSet(T)=delete
absl::str_format_internal::Flags::kLeft
@ kLeft
absl::str_format_internal::FlagsContains
constexpr bool FlagsContains(Flags haystack, Flags needle)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:150
absl::str_format_internal::FormatConversionCharIsFloat
bool FormatConversionCharIsFloat(FormatConversionChar c)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:232
ABSL_INTERNAL_X_SEP
#define ABSL_INTERNAL_X_SEP
memcpy
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
absl::FormatConversionChar::e
@ e
absl::str_format_internal::FormatSinkImpl::Wrap
T Wrap()
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:114
ABSL_NAMESPACE_BEGIN
#define ABSL_NAMESPACE_BEGIN
Definition: third_party/abseil-cpp/absl/base/config.h:170
absl::FormatConversionCharSet::kStar
@ kStar
autogen_x86imm.f
f
Definition: autogen_x86imm.py:9
absl::str_format_internal::FormatConversionSpecImpl::has_left_flag
bool has_left_flag() const
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:278
absl::str_format_internal::FormatConversionSpecImpl::flags_
Flags flags_
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:310
absl::str_format_internal::FormatRawSinkImpl::Extract
static FormatRawSinkImpl Extract(T s)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:52
G
#define G(b, c, d)
Definition: md4.c:113
absl::FormatConversionChar::G
@ G
absl::str_format_internal::Flags::kNonBasic
@ kNonBasic
absl::FormatConversionChar::F
@ F
setup.v
v
Definition: third_party/bloaty/third_party/capstone/bindings/python/setup.py:42
absl::FormatConversionChar::d
@ d
absl::str_format_internal::Flags::kZero
@ kZero
ABSL_INTERNAL_X_VAL
#define ABSL_INTERNAL_X_VAL(id)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:199
conv
const FormatConversionSpecImpl & conv
Definition: abseil-cpp/absl/strings/internal/str_format/float_conversion.cc:449
uint64_t
unsigned __int64 uint64_t
Definition: stdint-msvc2008.h:90
absl::FormatConversionChar::g
@ g
absl::str_format_internal::FormatConversionSpecImpl::has_show_pos_flag
bool has_show_pos_flag() const
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:279
A
#define A(T)
absl::str_format_internal::FormatConversionSpecImpl::has_alt_flag
bool has_alt_flag() const
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:285
absl::str_format_internal::FormatSinkImpl::~FormatSinkImpl
~FormatSinkImpl()
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:71
buf_
char buf_[N]
Definition: cxa_demangle.cpp:4722
absl::FormatConversionCharSet::kFloating
@ kFloating
absl::str_format_internal::FormatConversionSpecImplFriend::SetPrecision
static void SetPrecision(int p, FormatConversionSpecImpl *conv)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:326
absl::str_format_internal::FormatSinkImpl
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:67
absl::str_format_internal::FormatConversionSpecImpl::has_sign_col_flag
bool has_sign_col_flag() const
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:282
absl::str_format_internal::FormatConversionSpecImpl::width
int width() const
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:297
absl::str_format_internal::FormatConversionSpecImpl::precision
int precision() const
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:300
absl::FormatConversionChar::n
@ n
absl::FormatConversionChar::c
@ c
absl::str_format_internal::Contains
constexpr bool Contains(FormatConversionCharSet set, FormatConversionChar c)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:434
b
uint64_t b
Definition: abseil-cpp/absl/container/internal/layout_test.cc:53
g
struct @717 g
absl::operator|
constexpr uint128 operator|(uint128 lhs, uint128 rhs)
Definition: abseil-cpp/absl/numeric/int128.h:856
F
#define F(b, c, d)
Definition: md4.c:112
absl::str_format_internal::Flags
Flags
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:134
absl::str_format_internal::FormatConversionSpecImplFriend::SetConversionChar
static void SetConversionChar(FormatConversionChar c, FormatConversionSpecImpl *conv)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:319
absl::FormatConversionChar::x
@ x
absl::str_format_internal::FormatConversionCharToConvInt
constexpr uint64_t FormatConversionCharToConvInt(char conv)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:356
absl::FormatConversionChar
FormatConversionChar
Definition: abseil-cpp/absl/strings/str_format.h:636
absl::str_format_internal::FormatConversionSpecImpl::Wrap
T Wrap()
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:303
absl::str_format_internal::FormatConversionSpecImpl
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:274
size_
size_t size_
Definition: memory_allocator.cc:56
count
int * count
Definition: bloaty/third_party/googletest/googlemock/test/gmock_stress_test.cc:96
absl::str_format_internal::FormatConversionCharToChar
char FormatConversionCharToChar(FormatConversionChar c)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:247
absl::str_format_internal::FormatSinkImpl::size
size_t size() const
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:108
fix_build_deps.r
r
Definition: fix_build_deps.py:491
string_view
absl::string_view string_view
Definition: attr.cc:22
absl::str_format_internal::FormatConversionCharFromChar
FormatConversionChar FormatConversionCharFromChar(char c)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:209
A
Definition: miscompile_with_no_unique_address_test.cc:23
cpp.gmock_class.set
set
Definition: bloaty/third_party/googletest/googlemock/scripts/generator/cpp/gmock_class.py:44
absl::FormatConversionChar::u
@ u
absl::FormatConversionChar::p
@ p
absl::FormatConversionCharSet::kPointer
@ kPointer
absl::str_format_internal::FormatRawSinkImpl::Write
void Write(string_view s)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:49
absl::FormatConversionChar::o
@ o
absl::FormatConversionCharSet
FormatConversionCharSet
Definition: abseil-cpp/absl/strings/str_format.h:737
absl::FormatConversionChar::a
@ a
absl::FormatConversionCharSet::kNumeric
@ kNumeric
absl::str_format_internal::Flags::kAlt
@ kAlt
absl::str_format_internal::FormatConversionCharSetUnion
constexpr FormatConversionCharSet FormatConversionCharSetUnion(FormatConversionCharSet a, CharSet... rest)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:345
absl::str_format_internal::FormatConversionSpecImplFriend
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:315
ABSL_INTERNAL_CHAR_SET_CASE
#define ABSL_INTERNAL_CHAR_SET_CASE(c)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:375
absl::FormatConversionCharSet::kIntegral
@ kIntegral
absl::str_format_internal::FormatConversionSpecImpl::width_
int width_
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:311
absl
Definition: abseil-cpp/absl/algorithm/algorithm.h:31
absl::FormatConversionChar::A
@ A
absl::str_format_internal::FormatSinkImpl::FormatSinkImpl
FormatSinkImpl(FormatRawSinkImpl raw)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:69
absl::str_format_internal::FormatSinkImpl::Flush
void Flush()
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:73
absl::str_format_internal::FormatSinkImpl::Avail
size_t Avail() const
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:124
absl::FormatConversionChar::f
@ f
ABSL_INTERNAL_CONVERSION_CHARS_EXPAND_
#define ABSL_INTERNAL_CONVERSION_CHARS_EXPAND_(X_VAL, X_SEP)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:162
str_format_internal
absl::str_format_internal::Flags::kBasic
@ kBasic
absl::str_format_internal::FormatConversionSpecImpl::is_basic
bool is_basic() const
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:277
absl::str_format_internal::FormatConversionCharSetInternal
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:374
absl::str_format_internal::FlagsToString
std::string FlagsToString(Flags v)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.cc:26


grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:20