bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h
Go to the documentation of this file.
1 //
2 // Copyright 2019 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_FLAGS_INTERNAL_FLAG_H_
17 #define ABSL_FLAGS_INTERNAL_FLAG_H_
18 
19 #include <stddef.h>
20 #include <stdint.h>
21 
22 #include <atomic>
23 #include <cstring>
24 #include <memory>
25 #include <new>
26 #include <string>
27 #include <type_traits>
28 #include <typeinfo>
29 
30 #include "absl/base/attributes.h"
31 #include "absl/base/call_once.h"
32 #include "absl/base/config.h"
33 #include "absl/base/optimization.h"
34 #include "absl/base/thread_annotations.h"
35 #include "absl/flags/commandlineflag.h"
36 #include "absl/flags/config.h"
37 #include "absl/flags/internal/commandlineflag.h"
38 #include "absl/flags/internal/registry.h"
39 #include "absl/flags/internal/sequence_lock.h"
40 #include "absl/flags/marshalling.h"
41 #include "absl/meta/type_traits.h"
42 #include "absl/strings/string_view.h"
43 #include "absl/synchronization/mutex.h"
44 #include "absl/utility/utility.h"
45 
46 namespace absl {
48 
50 // Forward declaration of absl::Flag<T> public API.
51 namespace flags_internal {
52 template <typename T>
53 class Flag;
54 } // namespace flags_internal
55 
56 #if defined(_MSC_VER) && !defined(__clang__)
57 template <typename T>
58 class Flag;
59 #else
60 template <typename T>
61 using Flag = flags_internal::Flag<T>;
62 #endif
63 
64 template <typename T>
66 
67 template <typename T>
68 void SetFlag(absl::Flag<T>* flag, const T& v);
69 
70 template <typename T, typename V>
71 void SetFlag(absl::Flag<T>* flag, const V& v);
72 
73 template <typename U>
74 const CommandLineFlag& GetFlagReflectionHandle(const absl::Flag<U>& f);
75 
77 // Flag value type operations, eg., parsing, copying, etc. are provided
78 // by function specific to that type with a signature matching FlagOpFn.
79 
80 namespace flags_internal {
81 
82 enum class FlagOp {
83  kAlloc,
84  kDelete,
85  kCopy,
87  kSizeof,
90  kParse,
91  kUnparse,
93 };
94 using FlagOpFn = void* (*)(FlagOp, const void*, void*, void*);
95 
96 // Forward declaration for Flag value specific operations.
97 template <typename T>
98 void* FlagOps(FlagOp op, const void* v1, void* v2, void* v3);
99 
100 // Allocate aligned memory for a flag value.
101 inline void* Alloc(FlagOpFn op) {
102  return op(FlagOp::kAlloc, nullptr, nullptr, nullptr);
103 }
104 // Deletes memory interpreting obj as flag value type pointer.
105 inline void Delete(FlagOpFn op, void* obj) {
106  op(FlagOp::kDelete, nullptr, obj, nullptr);
107 }
108 // Copies src to dst interpreting as flag value type pointers.
109 inline void Copy(FlagOpFn op, const void* src, void* dst) {
110  op(FlagOp::kCopy, src, dst, nullptr);
111 }
112 // Construct a copy of flag value in a location pointed by dst
113 // based on src - pointer to the flag's value.
114 inline void CopyConstruct(FlagOpFn op, const void* src, void* dst) {
115  op(FlagOp::kCopyConstruct, src, dst, nullptr);
116 }
117 // Makes a copy of flag value pointed by obj.
118 inline void* Clone(FlagOpFn op, const void* obj) {
119  void* res = flags_internal::Alloc(op);
121  return res;
122 }
123 // Returns true if parsing of input text is successfull.
124 inline bool Parse(FlagOpFn op, absl::string_view text, void* dst,
125  std::string* error) {
126  return op(FlagOp::kParse, &text, dst, error) != nullptr;
127 }
128 // Returns string representing supplied value.
129 inline std::string Unparse(FlagOpFn op, const void* val) {
131  op(FlagOp::kUnparse, val, &result, nullptr);
132  return result;
133 }
134 // Returns size of flag value type.
135 inline size_t Sizeof(FlagOpFn op) {
136  // This sequence of casts reverses the sequence from
137  // `flags_internal::FlagOps()`
138  return static_cast<size_t>(reinterpret_cast<intptr_t>(
139  op(FlagOp::kSizeof, nullptr, nullptr, nullptr)));
140 }
141 // Returns fast type id coresponding to the value type.
143  return reinterpret_cast<FlagFastTypeId>(
144  op(FlagOp::kFastTypeId, nullptr, nullptr, nullptr));
145 }
146 // Returns fast type id coresponding to the value type.
147 inline const std::type_info* RuntimeTypeId(FlagOpFn op) {
148  return reinterpret_cast<const std::type_info*>(
149  op(FlagOp::kRuntimeTypeId, nullptr, nullptr, nullptr));
150 }
151 // Returns offset of the field value_ from the field impl_ inside of
152 // absl::Flag<T> data. Given FlagImpl pointer p you can get the
153 // location of the corresponding value as:
154 // reinterpret_cast<char*>(p) + ValueOffset().
155 inline ptrdiff_t ValueOffset(FlagOpFn op) {
156  // This sequence of casts reverses the sequence from
157  // `flags_internal::FlagOps()`
158  return static_cast<ptrdiff_t>(reinterpret_cast<intptr_t>(
159  op(FlagOp::kValueOffset, nullptr, nullptr, nullptr)));
160 }
161 
162 // Returns an address of RTTI's typeid(T).
163 template <typename T>
164 inline const std::type_info* GenRuntimeTypeId() {
165 #if defined(ABSL_FLAGS_INTERNAL_HAS_RTTI)
166  return &typeid(T);
167 #else
168  return nullptr;
169 #endif
170 }
171 
173 // Flag help auxiliary structs.
174 
175 // This is help argument for absl::Flag encapsulating the string literal pointer
176 // or pointer to function generating it as well as enum descriminating two
177 // cases.
178 using HelpGenFunc = std::string (*)();
179 
180 template <size_t N>
181 struct FixedCharArray {
182  char value[N];
183 
184  template <size_t... I>
187  return (void)str, FixedCharArray<N>({{str[I]..., '\0'}});
188  }
189 };
190 
191 template <typename Gen, size_t N = Gen::Value().size()>
192 constexpr FixedCharArray<N + 1> HelpStringAsArray(int) {
195 }
196 
197 template <typename Gen>
198 constexpr std::false_type HelpStringAsArray(char) {
199  return std::false_type{};
200 }
201 
202 union FlagHelpMsg {
203  constexpr explicit FlagHelpMsg(const char* help_msg) : literal(help_msg) {}
204  constexpr explicit FlagHelpMsg(HelpGenFunc help_gen) : gen_func(help_gen) {}
205 
206  const char* literal;
208 };
209 
210 enum class FlagHelpKind : uint8_t { kLiteral = 0, kGenFunc = 1 };
211 
212 struct FlagHelpArg {
213  FlagHelpMsg source;
215 };
216 
217 extern const char kStrippedFlagHelp[];
218 
219 // These two HelpArg overloads allows us to select at compile time one of two
220 // way to pass Help argument to absl::Flag. We'll be passing
221 // AbslFlagHelpGenFor##name as Gen and integer 0 as a single argument to prefer
222 // first overload if possible. If help message is evaluatable on constexpr
223 // context We'll be able to make FixedCharArray out of it and we'll choose first
224 // overload. In this case the help message expression is immediately evaluated
225 // and is used to construct the absl::Flag. No additionl code is generated by
226 // ABSL_FLAG Otherwise SFINAE kicks in and first overload is dropped from the
227 // consideration, in which case the second overload will be used. The second
228 // overload does not attempt to evaluate the help message expression
229 // immediately and instead delays the evaluation by returing the function
230 // pointer (&T::NonConst) genering the help message when necessary. This is
231 // evaluatable in constexpr context, but the cost is an extra function being
232 // generated in the ABSL_FLAG code.
233 template <typename Gen, size_t N>
234 constexpr FlagHelpArg HelpArg(const FixedCharArray<N>& value) {
235  return {FlagHelpMsg(value.value), FlagHelpKind::kLiteral};
236 }
237 
238 template <typename Gen>
239 constexpr FlagHelpArg HelpArg(std::false_type) {
240  return {FlagHelpMsg(&Gen::NonConst), FlagHelpKind::kGenFunc};
241 }
242 
244 // Flag default value auxiliary structs.
245 
246 // Signature for the function generating the initial flag value (usually
247 // based on default value supplied in flag's definition)
248 using FlagDfltGenFunc = void (*)(void*);
249 
250 union FlagDefaultSrc {
251  constexpr explicit FlagDefaultSrc(FlagDfltGenFunc gen_func_arg)
252  : gen_func(gen_func_arg) {}
253 
254 #define ABSL_FLAGS_INTERNAL_DFLT_FOR_TYPE(T, name) \
255  T name##_value; \
256  constexpr explicit FlagDefaultSrc(T value) : name##_value(value) {} // NOLINT
258 #undef ABSL_FLAGS_INTERNAL_DFLT_FOR_TYPE
259 
260  void* dynamic_value;
262 };
263 
264 enum class FlagDefaultKind : uint8_t {
265  kDynamicValue = 0,
266  kGenFunc = 1,
267  kOneWord = 2 // for default values UP to one word in size
268 };
269 
270 struct FlagDefaultArg {
271  FlagDefaultSrc source;
273 };
274 
275 // This struct and corresponding overload to InitDefaultValue are used to
276 // facilitate usage of {} as default value in ABSL_FLAG macro.
277 // TODO(rogeeff): Fix handling types with explicit constructors.
278 struct EmptyBraces {};
279 
280 template <typename T>
281 constexpr T InitDefaultValue(T t) {
282  return t;
283 }
284 
285 template <typename T>
286 constexpr T InitDefaultValue(EmptyBraces) {
287  return T{};
288 }
289 
290 template <typename ValueT, typename GenT,
292  (GenT{}, 0)>
293 constexpr FlagDefaultArg DefaultArg(int) {
294  return {FlagDefaultSrc(GenT{}.value), FlagDefaultKind::kOneWord};
295 }
296 
297 template <typename ValueT, typename GenT>
298 constexpr FlagDefaultArg DefaultArg(char) {
299  return {FlagDefaultSrc(&GenT::Gen), FlagDefaultKind::kGenFunc};
300 }
301 
303 // Flag current value auxiliary structs.
304 
305 constexpr int64_t UninitializedFlagValue() { return 0xababababababababll; }
306 
307 template <typename T>
308 using FlagUseOneWordStorage = std::integral_constant<
310  (sizeof(T) <= 8)>;
311 
312 template <class T>
313 using FlagShouldUseSequenceLock = std::integral_constant<
315  (sizeof(T) > 8)>;
316 
318  kAlignedBuffer = 0,
319  kOneWordAtomic = 1,
320  kSequenceLocked = 2,
321 };
322 
323 template <typename T>
324 static constexpr FlagValueStorageKind StorageKind() {
329 }
330 
331 struct FlagOneWordValue {
333 
334  std::atomic<int64_t> value;
335 };
336 
337 template <typename T,
338  FlagValueStorageKind Kind = flags_internal::StorageKind<T>()>
339 struct FlagValue;
340 
341 template <typename T>
342 struct FlagValue<T, FlagValueStorageKind::kAlignedBuffer> {
343  bool Get(const SequenceLock&, T&) const { return false; }
344 
345  alignas(T) char value[sizeof(T)];
346 };
347 
348 template <typename T>
349 struct FlagValue<T, FlagValueStorageKind::kOneWordAtomic> : FlagOneWordValue {
350  bool Get(const SequenceLock&, T& dst) const {
351  int64_t one_word_val = value.load(std::memory_order_acquire);
352  if (ABSL_PREDICT_FALSE(one_word_val == UninitializedFlagValue())) {
353  return false;
354  }
355  std::memcpy(&dst, static_cast<const void*>(&one_word_val), sizeof(T));
356  return true;
357  }
358 };
359 
360 template <typename T>
361 struct FlagValue<T, FlagValueStorageKind::kSequenceLocked> {
362  bool Get(const SequenceLock& lock, T& dst) const {
363  return lock.TryRead(&dst, value_words, sizeof(T));
364  }
365 
366  static constexpr int kNumWords =
367  flags_internal::AlignUp(sizeof(T), sizeof(uint64_t)) / sizeof(uint64_t);
368 
369  alignas(T) alignas(
370  std::atomic<uint64_t>) std::atomic<uint64_t> value_words[kNumWords];
371 };
372 
374 // Flag callback auxiliary structs.
375 
376 // Signature for the mutation callback used by watched Flags
377 // The callback is noexcept.
378 // TODO(rogeeff): add noexcept after C++17 support is added.
379 using FlagCallbackFunc = void (*)();
380 
381 struct FlagCallback {
383  absl::Mutex guard; // Guard for concurrent callback invocations.
384 };
385 
387 // Flag implementation, which does not depend on flag value type.
388 // The class encapsulates the Flag's data and access to it.
389 
390 struct DynValueDeleter {
391  explicit DynValueDeleter(FlagOpFn op_arg = nullptr);
392  void operator()(void* ptr) const;
393 
394  FlagOpFn op;
395 };
396 
397 class FlagState;
398 
399 class FlagImpl final : public CommandLineFlag {
400  public:
401  constexpr FlagImpl(const char* name, const char* filename, FlagOpFn op,
403  FlagDefaultArg default_arg)
404  : name_(name),
406  op_(op),
407  help_(help.source),
408  help_source_kind_(static_cast<uint8_t>(help.kind)),
409  value_storage_kind_(static_cast<uint8_t>(value_kind)),
410  def_kind_(static_cast<uint8_t>(default_arg.kind)),
411  modified_(false),
413  callback_(nullptr),
414  default_value_(default_arg.source),
415  data_guard_{} {}
416 
417  // Constant access methods
418  void Read(void* dst) const override ABSL_LOCKS_EXCLUDED(*DataGuard());
419 
420  // Mutating access methods
421  void Write(const void* src) ABSL_LOCKS_EXCLUDED(*DataGuard());
422 
423  // Interfaces to operate on callbacks.
424  void SetCallback(const FlagCallbackFunc mutation_callback)
427 
428  // Used in read/write operations to validate source/target has correct type.
429  // For example if flag is declared as absl::Flag<int> FLAGS_foo, a call to
430  // absl::GetFlag(FLAGS_foo) validates that the type of FLAGS_foo is indeed
431  // int. To do that we pass the "assumed" type id (which is deduced from type
432  // int) as an argument `type_id`, which is in turn is validated against the
433  // type id stored in flag object by flag definition statement.
434  void AssertValidType(FlagFastTypeId type_id,
435  const std::type_info* (*gen_rtti)()) const;
436 
437  private:
438  template <typename T>
439  friend class Flag;
440  friend class FlagState;
441 
442  // Ensures that `data_guard_` is initialized and returns it.
444  ABSL_LOCK_RETURNED(reinterpret_cast<absl::Mutex*>(data_guard_));
445  // Returns heap allocated value of type T initialized with default value.
446  std::unique_ptr<void, DynValueDeleter> MakeInitValue() const
448  // Flag initialization called via absl::call_once.
449  void Init();
450 
451  // Offset value access methods. One per storage kind. These methods to not
452  // respect const correctness, so be very carefull using them.
453 
454  // This is a shared helper routine which encapsulates most of the magic. Since
455  // it is only used inside the three routines below, which are defined in
456  // flag.cc, we can define it in that file as well.
457  template <typename StorageT>
458  StorageT* OffsetValue() const;
459  // This is an accessor for a value stored in an aligned buffer storage
460  // used for non-trivially-copyable data types.
461  // Returns a mutable pointer to the start of a buffer.
462  void* AlignedBufferValue() const;
463 
464  // The same as above, but used for sequencelock-protected storage.
465  std::atomic<uint64_t>* AtomicBufferValue() const;
466 
467  // This is an accessor for a value stored as one word atomic. Returns a
468  // mutable reference to an atomic value.
469  std::atomic<int64_t>& OneWordValue() const;
470 
471  // Attempts to parse supplied `value` string. If parsing is successful,
472  // returns new value. Otherwise returns nullptr.
473  std::unique_ptr<void, DynValueDeleter> TryParse(absl::string_view value,
474  std::string& err) const
476  // Stores the flag value based on the pointer to the source.
478 
479  // Copy the flag data, protected by `seq_lock_` into `dst`.
480  //
481  // REQUIRES: ValueStorageKind() == kSequenceLocked.
482  void ReadSequenceLockedData(void* dst) const
484 
486  return static_cast<FlagHelpKind>(help_source_kind_);
487  }
489  return static_cast<FlagValueStorageKind>(value_storage_kind_);
490  }
493  return static_cast<FlagDefaultKind>(def_kind_);
494  }
495 
496  // CommandLineFlag interface implementation
497  absl::string_view Name() const override;
498  std::string Filename() const override;
499  std::string Help() const override;
500  FlagFastTypeId TypeId() const override;
501  bool IsSpecifiedOnCommandLine() const override
503  std::string DefaultValue() const override ABSL_LOCKS_EXCLUDED(*DataGuard());
504  std::string CurrentValue() const override ABSL_LOCKS_EXCLUDED(*DataGuard());
509 
511 
512  // Interfaces to save and restore flags to/from persistent state.
513  // Returns current flag state or nullptr if flag does not support
514  // saving and restoring a state.
515  std::unique_ptr<FlagStateInterface> SaveState() override
517 
518  // Restores the flag state to the supplied state object. If there is
519  // nothing to restore returns false. Otherwise returns true.
520  bool RestoreState(const FlagState& flag_state)
522 
524  ValueSource source, std::string& error) override
526 
527  // Immutable flag's state.
528 
529  // Flags name passed to ABSL_FLAG as second arg.
530  const char* const name_;
531  // The file name where ABSL_FLAG resides.
532  const char* const filename_;
533  // Type-specific operations "vtable".
535  // Help message literal or function to generate it.
537  // Indicates if help message was supplied as literal or generator func.
539  // Kind of storage this flag is using for the flag's value.
541 
542  uint8_t : 0; // The bytes containing the const bitfields must not be
543  // shared with bytes containing the mutable bitfields.
544 
545  // Mutable flag's state (guarded by `data_guard_`).
546 
547  // def_kind_ is not guard by DataGuard() since it is accessed in Init without
548  // locks.
549  uint8_t def_kind_ : 2;
550  // Has this flag's value been modified?
551  bool modified_ : 1 ABSL_GUARDED_BY(*DataGuard());
552  // Has this flag been specified on command line.
554 
555  // Unique tag for absl::call_once call to initialize this flag.
557 
558  // Sequence lock / mutation counter.
559  flags_internal::SequenceLock seq_lock_;
560 
561  // Optional flag's callback and absl::Mutex to guard the invocations.
562  FlagCallback* callback_ ABSL_GUARDED_BY(*DataGuard());
563  // Either a pointer to the function generating the default value based on the
564  // value specified in ABSL_FLAG or pointer to the dynamically set default
565  // value via SetCommandLineOptionWithMode. def_kind_ is used to distinguish
566  // these two cases.
568 
569  // This is reserved space for an absl::Mutex to guard flag data. It will be
570  // initialized in FlagImpl::Init via placement new.
571  // We can't use "absl::Mutex data_guard_", since this class is not literal.
572  // We do not want to use "absl::Mutex* data_guard_", since this would require
573  // heap allocation during initialization, which is both slows program startup
574  // and can fail. Using reserved space + placement new allows us to avoid both
575  // problems.
576  alignas(absl::Mutex) mutable char data_guard_[sizeof(absl::Mutex)];
577 };
578 
580 // The Flag object parameterized by the flag's value type. This class implements
581 // flag reflection handle interface.
582 
583 template <typename T>
584 class Flag {
585  public:
586  constexpr Flag(const char* name, const char* filename, FlagHelpArg help,
587  const FlagDefaultArg default_arg)
588  : impl_(name, filename, &FlagOps<T>, help,
589  flags_internal::StorageKind<T>(), default_arg),
590  value_() {}
591 
592  // CommandLineFlag interface
593  absl::string_view Name() const { return impl_.Name(); }
594  std::string Filename() const { return impl_.Filename(); }
595  std::string Help() const { return impl_.Help(); }
596  // Do not use. To be removed.
598  return impl_.IsSpecifiedOnCommandLine();
599  }
600  std::string DefaultValue() const { return impl_.DefaultValue(); }
601  std::string CurrentValue() const { return impl_.CurrentValue(); }
602 
603  private:
604  template <typename, bool>
605  friend class FlagRegistrar;
606  friend class FlagImplPeer;
607 
608  T Get() const {
609  // See implementation notes in CommandLineFlag::Get().
610  union U {
611  T value;
612  U() {}
613  ~U() { value.~T(); }
614  };
615  U u;
616 
617 #if !defined(NDEBUG)
618  impl_.AssertValidType(base_internal::FastTypeId<T>(), &GenRuntimeTypeId<T>);
619 #endif
620 
621  if (ABSL_PREDICT_FALSE(!value_.Get(impl_.seq_lock_, u.value))) {
622  impl_.Read(&u.value);
623  }
624  return std::move(u.value);
625  }
626  void Set(const T& v) {
627  impl_.AssertValidType(base_internal::FastTypeId<T>(), &GenRuntimeTypeId<T>);
628  impl_.Write(&v);
629  }
630 
631  // Access to the reflection.
632  const CommandLineFlag& Reflect() const { return impl_; }
633 
634  // Flag's data
635  // The implementation depends on value_ field to be placed exactly after the
636  // impl_ field, so that impl_ can figure out the offset to the value and
637  // access it.
638  FlagImpl impl_;
640 };
641 
643 // Trampoline for friend access
644 
645 class FlagImplPeer {
646  public:
647  template <typename T, typename FlagType>
648  static T InvokeGet(const FlagType& flag) {
649  return flag.Get();
650  }
651  template <typename FlagType, typename T>
652  static void InvokeSet(FlagType& flag, const T& v) {
653  flag.Set(v);
654  }
655  template <typename FlagType>
656  static const CommandLineFlag& InvokeReflect(const FlagType& f) {
657  return f.Reflect();
658  }
659 };
660 
662 // Implementation of Flag value specific operations routine.
663 template <typename T>
664 void* FlagOps(FlagOp op, const void* v1, void* v2, void* v3) {
665  switch (op) {
666  case FlagOp::kAlloc: {
667  std::allocator<T> alloc;
668  return std::allocator_traits<std::allocator<T>>::allocate(alloc, 1);
669  }
670  case FlagOp::kDelete: {
671  T* p = static_cast<T*>(v2);
672  p->~T();
673  std::allocator<T> alloc;
674  std::allocator_traits<std::allocator<T>>::deallocate(alloc, p, 1);
675  return nullptr;
676  }
677  case FlagOp::kCopy:
678  *static_cast<T*>(v2) = *static_cast<const T*>(v1);
679  return nullptr;
681  new (v2) T(*static_cast<const T*>(v1));
682  return nullptr;
683  case FlagOp::kSizeof:
684  return reinterpret_cast<void*>(static_cast<uintptr_t>(sizeof(T)));
685  case FlagOp::kFastTypeId:
686  return const_cast<void*>(base_internal::FastTypeId<T>());
688  return const_cast<std::type_info*>(GenRuntimeTypeId<T>());
689  case FlagOp::kParse: {
690  // Initialize the temporary instance of type T based on current value in
691  // destination (which is going to be flag's default value).
692  T temp(*static_cast<T*>(v2));
693  if (!absl::ParseFlag<T>(*static_cast<const absl::string_view*>(v1), &temp,
694  static_cast<std::string*>(v3))) {
695  return nullptr;
696  }
697  *static_cast<T*>(v2) = std::move(temp);
698  return v2;
699  }
700  case FlagOp::kUnparse:
701  *static_cast<std::string*>(v2) =
702  absl::UnparseFlag<T>(*static_cast<const T*>(v1));
703  return nullptr;
704  case FlagOp::kValueOffset: {
705  // Round sizeof(FlagImp) to a multiple of alignof(FlagValue<T>) to get the
706  // offset of the data.
707  ptrdiff_t round_to = alignof(FlagValue<T>);
708  ptrdiff_t offset =
709  (sizeof(FlagImpl) + round_to - 1) / round_to * round_to;
710  return reinterpret_cast<void*>(offset);
711  }
712  }
713  return nullptr;
714 }
715 
717 // This class facilitates Flag object registration and tail expression-based
718 // flag definition, for example:
719 // ABSL_FLAG(int, foo, 42, "Foo help").OnUpdate(NotifyFooWatcher);
720 struct FlagRegistrarEmpty {};
721 template <typename T, bool do_register>
722 class FlagRegistrar {
723  public:
724  explicit FlagRegistrar(Flag<T>& flag, const char* filename) : flag_(flag) {
725  if (do_register)
727  }
728 
730  flag_.impl_.SetCallback(cb);
731  return *this;
732  }
733 
734  // Make the registrar "die" gracefully as an empty struct on a line where
735  // registration happens. Registrar objects are intended to live only as
736  // temporary.
737  operator FlagRegistrarEmpty() const { return {}; } // NOLINT
738 
739  private:
740  Flag<T>& flag_; // Flag being registered (not owned).
741 };
742 
743 } // namespace flags_internal
745 } // namespace absl
746 
747 #endif // ABSL_FLAGS_INTERNAL_FLAG_H_
absl::flags_internal::FlagSettingMode
FlagSettingMode
Definition: abseil-cpp/absl/flags/internal/commandlineflag.h:34
absl::flags_internal::FlagImpl::value_storage_kind_
const uint8_t value_storage_kind_
Definition: abseil-cpp/absl/flags/internal/flag.h:593
ABSL_PREDICT_FALSE
#define ABSL_PREDICT_FALSE(x)
Definition: abseil-cpp/absl/base/optimization.h:180
absl::GetFlagReflectionHandle
const CommandLineFlag & GetFlagReflectionHandle(const absl::Flag< T > &f)
Definition: abseil-cpp/absl/flags/flag.h:134
xds_interop_client.str
str
Definition: xds_interop_client.py:487
absl::flags_internal::FlagOp::kSizeof
@ kSizeof
ptr
char * ptr
Definition: abseil-cpp/absl/base/internal/low_level_alloc_test.cc:45
absl::flags_internal::FlagImpl::CheckDefaultValueParsingRoundtrip
void CheckDefaultValueParsingRoundtrip() const override ABSL_LOCKS_EXCLUDED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.cc:586
absl::flags_internal::FlagImpl::seq_lock_
flags_internal::SequenceLock seq_lock_
Definition: abseil-cpp/absl/flags/internal/flag.h:612
_gevent_test_main.result
result
Definition: _gevent_test_main.py:96
flag
uint32_t flag
Definition: ssl_versions.cc:162
obj
OPENSSL_EXPORT const ASN1_OBJECT * obj
Definition: x509.h:1671
absl::flags_internal::Sizeof
size_t Sizeof(FlagOpFn op)
Definition: abseil-cpp/absl/flags/internal/flag.h:136
filename
const char * filename
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:135
absl::flags_internal::FlagImpl::ModificationCount
int64_t ModificationCount() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.cc:276
absl::flags_internal::FlagValueStorageKind::kOneWordAtomic
@ kOneWordAtomic
dst
static const char dst[]
Definition: test-fs-copyfile.c:37
absl::flags_internal::FlagRegistrar::FlagRegistrar
FlagRegistrar(Flag< T > &flag, const char *filename)
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:724
fix_build_deps.temp
temp
Definition: fix_build_deps.py:488
absl::flags_internal::FlagDefaultSrc::FlagDefaultSrc
constexpr FlagDefaultSrc(FlagDfltGenFunc gen_func_arg)
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:251
absl::SetFlag
void SetFlag(absl::Flag< T > *flag, const T &v)
Definition: abseil-cpp/absl/flags/flag.h:110
absl::flags_internal::RegisterCommandLineFlag
bool RegisterCommandLineFlag(CommandLineFlag &, const char *filename)
Definition: abseil-cpp/absl/flags/reflection.cc:191
absl::flags_internal::DynValueDeleter
Definition: abseil-cpp/absl/flags/internal/flag.h:423
absl::flags_internal::Flag::Reflect
const CommandLineFlag & Reflect() const
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:632
absl::flags_internal::FlagImpl::default_value_
FlagDefaultSrc default_value_
Definition: abseil-cpp/absl/flags/internal/flag.h:620
absl::flags_internal::FlagOps
void * FlagOps(FlagOp op, const void *v1, void *v2, void *v3)
Definition: abseil-cpp/absl/flags/internal/flag.h:717
absl::flags_internal::FlagImpl::DefaultValue
std::string DefaultValue() const override ABSL_LOCKS_EXCLUDED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.cc:285
const
#define const
Definition: bloaty/third_party/zlib/zconf.h:230
bool
bool
Definition: setup_once.h:312
absl::flags_internal::Flag::Help
std::string Help() const
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:595
absl::flags_internal::FlagImpl::HelpSourceKind
FlagHelpKind HelpSourceKind() const
Definition: abseil-cpp/absl/flags/internal/flag.h:538
absl::flags_internal::FlagImpl::SetCallback
void SetCallback(const FlagCallbackFunc mutation_callback) ABSL_LOCKS_EXCLUDED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.cc:317
absl::flags_internal::FlagRegistrarEmpty
Definition: abseil-cpp/absl/flags/internal/flag.h:773
absl::flags_internal::FlagImpl::Help
std::string Help() const override
Definition: abseil-cpp/absl/flags/internal/flag.cc:267
absl::flags_internal::FlagImpl::CurrentValue
std::string CurrentValue() const override ABSL_LOCKS_EXCLUDED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.cc:292
false
#define false
Definition: setup_once.h:323
ABSL_FLAGS_INTERNAL_DFLT_FOR_TYPE
#define ABSL_FLAGS_INTERNAL_DFLT_FOR_TYPE(T, name)
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:254
absl::flags_internal::FlagHelpArg::source
FlagHelpMsg source
Definition: abseil-cpp/absl/flags/internal/flag.h:214
absl::flags_internal::FlagImpl::Name
absl::string_view Name() const override
Definition: abseil-cpp/absl/flags/internal/flag.cc:261
absl::Mutex
Definition: abseil-cpp/absl/synchronization/mutex.h:131
absl::flags_internal::FlagImpl::RestoreState
bool RestoreState(const FlagState &flag_state) ABSL_LOCKS_EXCLUDED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.cc:382
absl::flags_internal::FlagFastTypeId
absl::base_internal::FastTypeIdType FlagFastTypeId
Definition: abseil-cpp/absl/flags/internal/commandlineflag.h:31
absl::flags_internal::Unparse
std::string Unparse(FlagOpFn op, const void *val)
Definition: abseil-cpp/absl/flags/internal/flag.h:130
absl::flags_internal::FlagDefaultSrc::gen_func
FlagDfltGenFunc gen_func
Definition: abseil-cpp/absl/flags/internal/flag.h:262
absl::string_view
Definition: abseil-cpp/absl/strings/string_view.h:167
google::protobuf.internal::false_type
integral_constant< bool, false > false_type
Definition: bloaty/third_party/protobuf/src/google/protobuf/stubs/template_util.h:90
absl::flags_internal::UninitializedFlagValue
constexpr int64_t UninitializedFlagValue()
Definition: abseil-cpp/absl/flags/internal/flag.h:306
absl::flags_internal::FlagHelpArg
Definition: abseil-cpp/absl/flags/internal/flag.h:213
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
error
grpc_error_handle error
Definition: retry_filter.cc:499
error_ref_leak.err
err
Definition: error_ref_leak.py:35
absl::flags_internal::FlagHelpMsg::FlagHelpMsg
constexpr FlagHelpMsg(HelpGenFunc help_gen)
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:204
absl::flags_internal::FlagDefaultKind::kGenFunc
@ kGenFunc
u
OPENSSL_EXPORT pem_password_cb void * u
Definition: pem.h:351
absl::flags_internal::FlagOp::kAlloc
@ kAlloc
absl::flags_internal::kStrippedFlagHelp
const char kStrippedFlagHelp[]
Definition: abseil-cpp/absl/flags/internal/flag.cc:51
absl::flags_internal::FlagValue< T, FlagValueStorageKind::kOneWordAtomic >::Get
bool Get(const SequenceLock &, T &dst) const
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:350
absl::flags_internal::AlignUp
constexpr size_t AlignUp(size_t x, size_t align)
Definition: abseil-cpp/absl/flags/internal/sequence_lock.h:33
absl::flags_internal::HelpStringAsArray
constexpr FixedCharArray< N+1 > HelpStringAsArray(int)
Definition: abseil-cpp/absl/flags/internal/flag.h:193
absl::flags_internal::FlagCallbackFunc
void(*)() FlagCallbackFunc
Definition: abseil-cpp/absl/flags/internal/flag.h:412
absl::flags_internal::FlagUseOneWordStorage
std::integral_constant< bool, absl::type_traits_internal::is_trivially_copyable< T >::value &&(sizeof(T)<=8)> FlagUseOneWordStorage
Definition: abseil-cpp/absl/flags/internal/flag.h:318
setup.name
name
Definition: setup.py:542
absl::flags_internal::FlagDefaultKind
FlagDefaultKind
Definition: abseil-cpp/absl/flags/internal/flag.h:265
absl::flags_internal::FlagImpl::Init
void Init()
Definition: abseil-cpp/absl/flags/internal/flag.cc:143
absl::flags_internal::FlagCallback
Definition: abseil-cpp/absl/flags/internal/flag.h:414
absl::type_traits_internal::is_trivially_copyable
Definition: abseil-cpp/absl/meta/type_traits.h:569
absl::flags_internal::FlagImpl::on_command_line_
bool on_command_line_
Definition: abseil-cpp/absl/flags/internal/flag.h:606
absl::flags_internal::FlagState
Definition: abseil-cpp/absl/flags/internal/flag.cc:88
absl::CommandLineFlag
Definition: abseil-cpp/absl/flags/commandlineflag.h:62
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::flags_internal::FlagDfltGenFunc
void(*)(void *) FlagDfltGenFunc
Definition: abseil-cpp/absl/flags/internal/flag.h:249
absl::flags_internal::Flag::Flag
constexpr Flag(const char *name, const char *filename, FlagHelpArg help, const FlagDefaultArg default_arg)
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:586
absl::flags_internal::FlagImpl::ValueStorageKind
FlagValueStorageKind ValueStorageKind() const
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:488
absl::flags_internal::FlagImpl::modified_
bool modified_
Definition: abseil-cpp/absl/flags/internal/flag.h:604
T
#define T(upbtypeconst, upbtype, ctype, default_value)
absl::flags_internal::FlagDefaultKind::kDynamicValue
@ kDynamicValue
absl::flags_internal::Flag::Name
absl::string_view Name() const
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:593
absl::flags_internal::FlagImpl::help_
const FlagHelpMsg help_
Definition: abseil-cpp/absl/flags/internal/flag.h:589
absl::flags_internal::HelpGenFunc
std::string(*)() HelpGenFunc
Definition: abseil-cpp/absl/flags/internal/flag.h:179
absl::flags_internal::FlagImpl::SaveState
std::unique_ptr< FlagStateInterface > SaveState() override ABSL_LOCKS_EXCLUDED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.cc:351
absl::flags_internal::FlagDefaultArg::kind
FlagDefaultKind kind
Definition: abseil-cpp/absl/flags/internal/flag.h:273
absl::flags_internal::FlagImpl::DefaultKind
FlagDefaultKind DefaultKind() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard())
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:491
absl::flags_internal::InitDefaultValue
constexpr T InitDefaultValue(T t)
Definition: abseil-cpp/absl/flags/internal/flag.h:282
absl::flags_internal::FlagValue< T >
ABSL_MUST_USE_RESULT
#define ABSL_MUST_USE_RESULT
Definition: abseil-cpp/absl/base/attributes.h:441
absl::flags_internal::FlagImpl::ParseFrom
bool ParseFrom(absl::string_view value, FlagSettingMode set_mode, ValueSource source, std::string &error) override ABSL_LOCKS_EXCLUDED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.cc:527
absl::flags_internal::FlagImpl
Definition: abseil-cpp/absl/flags/internal/flag.h:432
memcpy
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
absl::flags_internal::FixedCharArray
Definition: abseil-cpp/absl/flags/internal/flag.h:182
absl::flags_internal::FlagOp::kDelete
@ kDelete
ABSL_NAMESPACE_BEGIN
#define ABSL_NAMESPACE_BEGIN
Definition: third_party/abseil-cpp/absl/base/config.h:170
absl::flags_internal::FastTypeId
FlagFastTypeId FastTypeId(FlagOpFn op)
Definition: abseil-cpp/absl/flags/internal/flag.h:143
autogen_x86imm.f
f
Definition: autogen_x86imm.py:9
absl::flags_internal::FlagOp::kCopyConstruct
@ kCopyConstruct
absl::flags_internal::FlagImpl::Filename
std::string Filename() const override
Definition: abseil-cpp/absl/flags/internal/flag.cc:263
gen_server_registered_method_bad_client_test_body.text
def text
Definition: gen_server_registered_method_bad_client_test_body.py:50
absl::flags_internal::ABSL_GUARDED_BY
static ABSL_CONST_INIT std::string *program_name ABSL_GUARDED_BY(program_name_guard)
absl::flags_internal::FlagImplPeer::InvokeReflect
static const CommandLineFlag & InvokeReflect(const FlagType &f)
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:656
absl::flags_internal::FlagImpl::op_
const FlagOpFn op_
Definition: abseil-cpp/absl/flags/internal/flag.h:587
absl::flags_internal::FlagImpl::Write
void Write(const void *src) ABSL_LOCKS_EXCLUDED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.cc:502
absl::move
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
Definition: abseil-cpp/absl/utility/utility.h:221
absl::flags_internal::FlagStateInterface
Definition: abseil-cpp/absl/flags/internal/commandlineflag.h:56
int64_t
signed __int64 int64_t
Definition: stdint-msvc2008.h:89
absl::flags_internal::Flag::Set
void Set(const T &v)
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:626
absl::flags_internal::Clone
void * Clone(FlagOpFn op, const void *obj)
Definition: abseil-cpp/absl/flags/internal/flag.h:119
absl::flags_internal::Flag::IsSpecifiedOnCommandLine
bool IsSpecifiedOnCommandLine() const
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:597
flag_
int flag_
Definition: transport_stream_receiver_test.cc:166
impl_
std::shared_ptr< ExternalConnectionAcceptorImpl > impl_
Definition: external_connection_acceptor_impl.cc:43
absl::make_index_sequence
make_integer_sequence< size_t, N > make_index_sequence
Definition: abseil-cpp/absl/utility/utility.h:150
ABSL_LOCK_RETURNED
#define ABSL_LOCK_RETURNED(x)
Definition: abseil-cpp/absl/base/thread_annotations.h:174
absl::integer_sequence
Definition: abseil-cpp/absl/utility/utility.h:76
setup.v
v
Definition: third_party/bloaty/third_party/capstone/bindings/python/setup.py:42
google::protobuf::compiler::objectivec::FlagType
FlagType
Definition: bloaty/third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_helpers.h:151
ABSL_EXCLUSIVE_LOCKS_REQUIRED
#define ABSL_EXCLUSIVE_LOCKS_REQUIRED(...)
Definition: abseil-cpp/absl/base/thread_annotations.h:145
absl::flags_internal::FlagImpl::def_kind_
uint8_t def_kind_
Definition: abseil-cpp/absl/flags/internal/flag.h:602
absl::flags_internal::FlagCallback::guard
absl::Mutex guard
Definition: abseil-cpp/absl/flags/internal/flag.h:416
uint64_t
unsigned __int64 uint64_t
Definition: stdint-msvc2008.h:90
absl::flags_internal::Flag::Get
T Get() const
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:608
absl::flags_internal::FlagImpl::AssertValidType
void AssertValidType(FlagFastTypeId type_id, const std::type_info *(*gen_rtti)()) const
Definition: abseil-cpp/absl/flags/internal/flag.cc:195
absl::flags_internal::SequenceLock::TryRead
bool TryRead(void *dst, const std::atomic< uint64_t > *src, size_t size) const
Definition: abseil-cpp/absl/flags/internal/sequence_lock.h:80
absl::flags_internal::FlagHelpMsg
Definition: abseil-cpp/absl/flags/internal/flag.h:203
asyncio_get_stats.help
help
Definition: asyncio_get_stats.py:39
absl::flags_internal::FlagOp
FlagOp
Definition: abseil-cpp/absl/flags/internal/flag.h:83
absl::flags_internal::FlagImpl::OneWordValue
std::atomic< int64_t > & OneWordValue() const
Definition: abseil-cpp/absl/flags/internal/flag.cc:424
absl::flags_internal::FlagImpl::FlagImpl
constexpr FlagImpl(const char *name, const char *filename, FlagOpFn op, FlagHelpArg help, FlagValueStorageKind value_kind, FlagDefaultArg default_arg)
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:401
absl::flags_internal::FlagOp::kValueOffset
@ kValueOffset
intptr_t
_W64 signed int intptr_t
Definition: stdint-msvc2008.h:118
absl::flags_internal::FlagImpl::TryParse
std::unique_ptr< void, DynValueDeleter > TryParse(absl::string_view value, std::string &err) const ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.cc:434
absl::flags_internal::FlagRegistrar
Definition: abseil-cpp/absl/flags/internal/flag.h:775
absl::flags_internal::FlagDefaultKind::kOneWord
@ kOneWord
absl::GetFlag
ABSL_MUST_USE_RESULT T GetFlag(const absl::Flag< T > &flag)
Definition: abseil-cpp/absl/flags/flag.h:98
absl::flags_internal::Parse
bool Parse(FlagOpFn op, absl::string_view text, void *dst, std::string *error)
Definition: abseil-cpp/absl/flags/internal/flag.h:125
absl::flags_internal::Alloc
void * Alloc(FlagOpFn op)
Definition: abseil-cpp/absl/flags/internal/flag.h:102
absl::flags_internal::FlagOp::kParse
@ kParse
uintptr_t
_W64 unsigned int uintptr_t
Definition: stdint-msvc2008.h:119
absl::flags_internal::FlagHelpKind::kLiteral
@ kLiteral
absl::flags_internal::FlagImpl::DataGuard
FlagCallback *callback_ ABSL_GUARDED_BY * DataGuard()
Definition: abseil-cpp/absl/flags/internal/flag.cc:187
absl::flags_internal::HelpArg
constexpr FlagHelpArg HelpArg(const FixedCharArray< N > &value)
Definition: abseil-cpp/absl/flags/internal/flag.h:235
absl::Flag
flags_internal::Flag< T > Flag
Definition: abseil-cpp/absl/flags/declare.h:48
absl::flags_internal::FlagHelpKind
FlagHelpKind
Definition: abseil-cpp/absl/flags/internal/flag.h:211
absl::flags_internal::FlagValueStorageKind
FlagValueStorageKind
Definition: abseil-cpp/absl/flags/internal/flag.h:325
stdint.h
absl::flags_internal::ValueSource
ValueSource
Definition: abseil-cpp/absl/flags/internal/commandlineflag.h:47
absl::flags_internal::FlagValue< T, FlagValueStorageKind::kSequenceLocked >::Get
bool Get(const SequenceLock &lock, T &dst) const
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:362
absl::flags_internal::FlagDefaultSrc::dynamic_value
void * dynamic_value
Definition: abseil-cpp/absl/flags/internal/flag.h:261
absl::flags_internal::FlagImpl::help_source_kind_
const uint8_t help_source_kind_
Definition: abseil-cpp/absl/flags/internal/flag.h:591
absl::flags_internal::FlagRegistrar::OnUpdate
FlagRegistrar OnUpdate(FlagCallbackFunc cb) &&
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:729
absl::flags_internal::FlagValue< T, FlagValueStorageKind::kAlignedBuffer >::Get
bool Get(const SequenceLock &, T &) const
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:343
absl::flags_internal::GenRuntimeTypeId
const std::type_info * GenRuntimeTypeId()
Definition: abseil-cpp/absl/flags/internal/flag.h:165
absl::flags_internal::FlagImplPeer
Definition: abseil-cpp/absl/flags/internal/flag.h:698
absl::flags_internal::FlagHelpArg::kind
FlagHelpKind kind
Definition: abseil-cpp/absl/flags/internal/flag.h:215
value_
int value_
Definition: orphanable_test.cc:38
ABSL_FLAGS_INTERNAL_BUILTIN_TYPES
#define ABSL_FLAGS_INTERNAL_BUILTIN_TYPES(A)
Definition: third_party/abseil-cpp/absl/flags/config.h:50
value
const char * value
Definition: hpack_parser_table.cc:165
absl::flags_internal::FlagImpl::IsSpecifiedOnCommandLine
bool IsSpecifiedOnCommandLine() const override ABSL_LOCKS_EXCLUDED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.cc:280
absl::flags_internal::FlagImpl::AtomicBufferValue
std::atomic< uint64_t > * AtomicBufferValue() const
Definition: abseil-cpp/absl/flags/internal/flag.cc:419
absl::flags_internal::FlagImpl::data_guard_
char data_guard_[sizeof(absl::Mutex)]
Definition: abseil-cpp/absl/flags/internal/flag.h:629
absl::flags_internal::FlagImpl::name_
const char *const name_
Definition: abseil-cpp/absl/flags/internal/flag.h:583
absl::flags_internal::Delete
void Delete(FlagOpFn op, void *obj)
Definition: abseil-cpp/absl/flags/internal/flag.h:106
absl::flags_internal::Flag
Definition: abseil-cpp/absl/flags/declare.h:36
absl::flags_internal::CopyConstruct
void CopyConstruct(FlagOpFn op, const void *src, void *dst)
Definition: abseil-cpp/absl/flags/internal/flag.h:115
N
#define N
Definition: sync_test.cc:37
I
#define I(b, c, d)
Definition: md5.c:120
absl::flags_internal::FlagImpl::TypeId
FlagFastTypeId TypeId() const override
Definition: abseil-cpp/absl/flags/internal/flag.cc:272
absl::flags_internal::FlagImpl::Read
void Read(void *dst) const override ABSL_LOCKS_EXCLUDED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.cc:449
absl::flags_internal::FlagImplPeer::InvokeGet
static T InvokeGet(const FlagType &flag)
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:648
absl::flags_internal::Flag::Filename
std::string Filename() const
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:594
ABSL_LOCKS_EXCLUDED
#define ABSL_LOCKS_EXCLUDED(...)
Definition: abseil-cpp/absl/base/thread_annotations.h:163
absl::flags_internal::FlagHelpKind::kGenFunc
@ kGenFunc
absl::flags_internal::FlagDefaultSrc
Definition: abseil-cpp/absl/flags/internal/flag.h:251
absl::flags_internal::FlagImpl::ReadSequenceLockedData
void ReadSequenceLockedData(void *dst) const ABSL_LOCKS_EXCLUDED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.cc:488
absl::flags_internal::FlagImpl::ValidateInputValue
bool ValidateInputValue(absl::string_view value) const override ABSL_LOCKS_EXCLUDED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.cc:605
absl::flags_internal::FlagImpl::filename_
const char *const filename_
Definition: abseil-cpp/absl/flags/internal/flag.h:585
absl::flags_internal::FlagImpl::init_control_
absl::once_flag init_control_
Definition: abseil-cpp/absl/flags/internal/flag.h:609
absl::flags_internal::FlagOp::kFastTypeId
@ kFastTypeId
absl::str_format_internal::LengthMod::t
@ t
absl::flags_internal::FlagOp::kCopy
@ kCopy
absl::flags_internal::ValueOffset
ptrdiff_t ValueOffset(FlagOpFn op)
Definition: abseil-cpp/absl/flags/internal/flag.h:156
std
Definition: grpcpp/impl/codegen/async_unary_call.h:407
absl::flags_internal::StorageKind
static constexpr FlagValueStorageKind StorageKind()
Definition: abseil-cpp/absl/flags/internal/flag.h:333
absl::flags_internal::FlagDefaultArg
Definition: abseil-cpp/absl/flags/internal/flag.h:271
absl::flags_internal::Flag::CurrentValue
std::string CurrentValue() const
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:601
absl::flags_internal::FlagOp::kRuntimeTypeId
@ kRuntimeTypeId
absl::flags_internal::FlagImplPeer::InvokeSet
static void InvokeSet(FlagType &flag, const T &v)
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:652
absl::flags_internal::FlagDefaultArg::source
FlagDefaultSrc source
Definition: abseil-cpp/absl/flags/internal/flag.h:272
absl::flags_internal::FlagCallback::func
FlagCallbackFunc func
Definition: abseil-cpp/absl/flags/internal/flag.h:415
absl::flags_internal::FlagImpl::MakeInitValue
absl::Mutex *DataGuard() const ABSL_LOCK_RETURNED(reinterpret_cast< absl std::unique_ptr< void, DynValueDeleter > MakeInitValue() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.cc:220
absl::flags_internal::DynValueDeleter::op
FlagOpFn op
Definition: abseil-cpp/absl/flags/internal/flag.h:427
absl::flags_internal::DynValueDeleter::DynValueDeleter
DynValueDeleter(FlagOpFn op_arg=nullptr)
Definition: abseil-cpp/absl/flags/internal/flag.cc:135
absl::flags_internal::FlagOpFn
void *(*)(FlagOp, const void *, void *, void *) FlagOpFn
Definition: abseil-cpp/absl/flags/internal/flag.h:95
google::protobuf::alignas
class PROTOBUF_EXPORT alignas(8) Arena final
Definition: third_party/bloaty/third_party/protobuf/src/google/protobuf/arena.h:250
absl::flags_internal::FlagShouldUseSequenceLock
std::integral_constant< bool, absl::type_traits_internal::is_trivially_copyable< T >::value &&(sizeof(T) > 8)> FlagShouldUseSequenceLock
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:315
absl::flags_internal::FlagOneWordValue::value
std::atomic< int64_t > value
Definition: abseil-cpp/absl/flags/internal/flag.h:345
absl::flags_internal::FlagImpl::OffsetValue
StorageT * OffsetValue() const
Definition: abseil-cpp/absl/flags/internal/flag.cc:406
absl::flags_internal::RuntimeTypeId
const std::type_info * RuntimeTypeId(FlagOpFn op)
Definition: abseil-cpp/absl/flags/internal/flag.h:148
absl
Definition: abseil-cpp/absl/algorithm/algorithm.h:31
absl::flags_internal::Flag::DefaultValue
std::string DefaultValue() const
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:600
absl::flags_internal::DynValueDeleter::operator()
void operator()(void *ptr) const
Definition: abseil-cpp/absl/flags/internal/flag.cc:137
absl::flags_internal::FixedCharArray::FromLiteralString
static constexpr FixedCharArray< N > FromLiteralString(absl::string_view str, absl::index_sequence< I... >)
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:185
asyncio_get_stats.type
type
Definition: asyncio_get_stats.py:37
Value
struct Value Value
Definition: bloaty/third_party/protobuf/php/ext/google/protobuf/protobuf.h:676
absl::once_flag
Definition: abseil-cpp/absl/base/call_once.h:85
absl::flags_internal::FlagImpl::AlignedBufferValue
void * AlignedBufferValue() const
Definition: abseil-cpp/absl/flags/internal/flag.cc:414
absl::flags_internal::FlagHelpMsg::gen_func
HelpGenFunc gen_func
Definition: abseil-cpp/absl/flags/internal/flag.h:208
setup.template
template
Definition: setup.py:47
absl::flags_internal::FlagValueStorageKind::kAlignedBuffer
@ kAlignedBuffer
absl::flags_internal::FlagValueStorageKind::kSequenceLocked
@ kSequenceLocked
absl::flags_internal::FlagOneWordValue::FlagOneWordValue
constexpr FlagOneWordValue()
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:332
op
static grpc_op * op
Definition: test/core/fling/client.cc:47
absl::flags_internal::FlagImpl::StoreValue
void StoreValue(const void *src) ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.cc:237
absl::flags_internal::FlagHelpMsg::literal
const char * literal
Definition: abseil-cpp/absl/flags/internal/flag.h:207
absl::flags_internal::FlagOp::kUnparse
@ kUnparse
alloc
std::allocator< int > alloc
Definition: abseil-cpp/absl/container/internal/hash_policy_traits_test.cc:87
cb
OPENSSL_EXPORT pem_password_cb * cb
Definition: pem.h:351
absl::flags_internal::Copy
void Copy(FlagOpFn op, const void *src, void *dst)
Definition: abseil-cpp/absl/flags/internal/flag.h:110
offset
voidpf uLong offset
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:142
absl::str_format_internal::LengthMod::ll
@ ll
absl::flags_internal::FlagHelpMsg::FlagHelpMsg
constexpr FlagHelpMsg(const char *help_msg)
Definition: bloaty/third_party/abseil-cpp/absl/flags/internal/flag.h:203
absl::flags_internal::SequenceLock
Definition: abseil-cpp/absl/flags/internal/sequence_lock.h:58
absl::flags_internal::FixedCharArray::value
char value[N]
Definition: abseil-cpp/absl/flags/internal/flag.h:183
absl::flags_internal::DefaultArg
constexpr FlagDefaultArg DefaultArg(int)
Definition: abseil-cpp/absl/flags/internal/flag.h:294
absl::flags_internal::FlagImpl::InvokeCallback
void InvokeCallback() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.cc:328


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