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/casts.h"
33 #include "absl/base/config.h"
34 #include "absl/base/optimization.h"
35 #include "absl/base/thread_annotations.h"
36 #include "absl/flags/commandlineflag.h"
37 #include "absl/flags/config.h"
38 #include "absl/flags/internal/commandlineflag.h"
39 #include "absl/flags/internal/registry.h"
40 #include "absl/flags/internal/sequence_lock.h"
41 #include "absl/flags/marshalling.h"
42 #include "absl/meta/type_traits.h"
43 #include "absl/strings/string_view.h"
44 #include "absl/synchronization/mutex.h"
45 #include "absl/utility/utility.h"
46 
47 namespace absl {
49 
51 // Forward declaration of absl::Flag<T> public API.
52 namespace flags_internal {
53 template <typename T>
54 class Flag;
55 } // namespace flags_internal
56 
57 #if defined(_MSC_VER) && !defined(__clang__)
58 template <typename T>
59 class Flag;
60 #else
61 template <typename T>
62 using Flag = flags_internal::Flag<T>;
63 #endif
64 
65 template <typename T>
67 
68 template <typename T>
69 void SetFlag(absl::Flag<T>* flag, const T& v);
70 
71 template <typename T, typename V>
72 void SetFlag(absl::Flag<T>* flag, const V& v);
73 
74 template <typename U>
75 const CommandLineFlag& GetFlagReflectionHandle(const absl::Flag<U>& f);
76 
78 // Flag value type operations, eg., parsing, copying, etc. are provided
79 // by function specific to that type with a signature matching FlagOpFn.
80 
81 namespace flags_internal {
82 
83 enum class FlagOp {
84  kAlloc,
85  kDelete,
86  kCopy,
88  kSizeof,
91  kParse,
92  kUnparse,
94 };
95 using FlagOpFn = void* (*)(FlagOp, const void*, void*, void*);
96 
97 // Forward declaration for Flag value specific operations.
98 template <typename T>
99 void* FlagOps(FlagOp op, const void* v1, void* v2, void* v3);
100 
101 // Allocate aligned memory for a flag value.
102 inline void* Alloc(FlagOpFn op) {
103  return op(FlagOp::kAlloc, nullptr, nullptr, nullptr);
104 }
105 // Deletes memory interpreting obj as flag value type pointer.
106 inline void Delete(FlagOpFn op, void* obj) {
107  op(FlagOp::kDelete, nullptr, obj, nullptr);
108 }
109 // Copies src to dst interpreting as flag value type pointers.
110 inline void Copy(FlagOpFn op, const void* src, void* dst) {
111  op(FlagOp::kCopy, src, dst, nullptr);
112 }
113 // Construct a copy of flag value in a location pointed by dst
114 // based on src - pointer to the flag's value.
115 inline void CopyConstruct(FlagOpFn op, const void* src, void* dst) {
116  op(FlagOp::kCopyConstruct, src, dst, nullptr);
117 }
118 // Makes a copy of flag value pointed by obj.
119 inline void* Clone(FlagOpFn op, const void* obj) {
120  void* res = flags_internal::Alloc(op);
122  return res;
123 }
124 // Returns true if parsing of input text is successfull.
126  std::string* error) {
127  return op(FlagOp::kParse, &text, dst, error) != nullptr;
128 }
129 // Returns string representing supplied value.
130 inline std::string Unparse(FlagOpFn op, const void* val) {
132  op(FlagOp::kUnparse, val, &result, nullptr);
133  return result;
134 }
135 // Returns size of flag value type.
136 inline size_t Sizeof(FlagOpFn op) {
137  // This sequence of casts reverses the sequence from
138  // `flags_internal::FlagOps()`
139  return static_cast<size_t>(reinterpret_cast<intptr_t>(
140  op(FlagOp::kSizeof, nullptr, nullptr, nullptr)));
141 }
142 // Returns fast type id coresponding to the value type.
144  return reinterpret_cast<FlagFastTypeId>(
145  op(FlagOp::kFastTypeId, nullptr, nullptr, nullptr));
146 }
147 // Returns fast type id coresponding to the value type.
148 inline const std::type_info* RuntimeTypeId(FlagOpFn op) {
149  return reinterpret_cast<const std::type_info*>(
150  op(FlagOp::kRuntimeTypeId, nullptr, nullptr, nullptr));
151 }
152 // Returns offset of the field value_ from the field impl_ inside of
153 // absl::Flag<T> data. Given FlagImpl pointer p you can get the
154 // location of the corresponding value as:
155 // reinterpret_cast<char*>(p) + ValueOffset().
156 inline ptrdiff_t ValueOffset(FlagOpFn op) {
157  // This sequence of casts reverses the sequence from
158  // `flags_internal::FlagOps()`
159  return static_cast<ptrdiff_t>(reinterpret_cast<intptr_t>(
160  op(FlagOp::kValueOffset, nullptr, nullptr, nullptr)));
161 }
162 
163 // Returns an address of RTTI's typeid(T).
164 template <typename T>
165 inline const std::type_info* GenRuntimeTypeId() {
166 #ifdef ABSL_INTERNAL_HAS_RTTI
167  return &typeid(T);
168 #else
169  return nullptr;
170 #endif
171 }
172 
174 // Flag help auxiliary structs.
175 
176 // This is help argument for absl::Flag encapsulating the string literal pointer
177 // or pointer to function generating it as well as enum descriminating two
178 // cases.
179 using HelpGenFunc = std::string (*)();
180 
181 template <size_t N>
183  char value[N];
184 
185  template <size_t... I>
188  return (void)str, FixedCharArray<N>({{str[I]..., '\0'}});
189  }
190 };
191 
192 template <typename Gen, size_t N = Gen::Value().size()>
196 }
197 
198 template <typename Gen>
200  return std::false_type{};
201 }
202 
203 union FlagHelpMsg {
204  constexpr explicit FlagHelpMsg(const char* help_msg) : literal(help_msg) {}
205  constexpr explicit FlagHelpMsg(HelpGenFunc help_gen) : gen_func(help_gen) {}
206 
207  const char* literal;
209 };
210 
211 enum class FlagHelpKind : uint8_t { kLiteral = 0, kGenFunc = 1 };
212 
213 struct FlagHelpArg {
216 };
217 
218 extern const char kStrippedFlagHelp[];
219 
220 // These two HelpArg overloads allows us to select at compile time one of two
221 // way to pass Help argument to absl::Flag. We'll be passing
222 // AbslFlagHelpGenFor##name as Gen and integer 0 as a single argument to prefer
223 // first overload if possible. If help message is evaluatable on constexpr
224 // context We'll be able to make FixedCharArray out of it and we'll choose first
225 // overload. In this case the help message expression is immediately evaluated
226 // and is used to construct the absl::Flag. No additionl code is generated by
227 // ABSL_FLAG Otherwise SFINAE kicks in and first overload is dropped from the
228 // consideration, in which case the second overload will be used. The second
229 // overload does not attempt to evaluate the help message expression
230 // immediately and instead delays the evaluation by returing the function
231 // pointer (&T::NonConst) genering the help message when necessary. This is
232 // evaluatable in constexpr context, but the cost is an extra function being
233 // generated in the ABSL_FLAG code.
234 template <typename Gen, size_t N>
236  return {FlagHelpMsg(value.value), FlagHelpKind::kLiteral};
237 }
238 
239 template <typename Gen>
241  return {FlagHelpMsg(&Gen::NonConst), FlagHelpKind::kGenFunc};
242 }
243 
245 // Flag default value auxiliary structs.
246 
247 // Signature for the function generating the initial flag value (usually
248 // based on default value supplied in flag's definition)
249 using FlagDfltGenFunc = void (*)(void*);
250 
252  constexpr explicit FlagDefaultSrc(FlagDfltGenFunc gen_func_arg)
253  : gen_func(gen_func_arg) {}
254 
255 #define ABSL_FLAGS_INTERNAL_DFLT_FOR_TYPE(T, name) \
256  T name##_value; \
257  constexpr explicit FlagDefaultSrc(T value) : name##_value(value) {} // NOLINT
259 #undef ABSL_FLAGS_INTERNAL_DFLT_FOR_TYPE
260 
263 };
264 
265 enum class FlagDefaultKind : uint8_t {
266  kDynamicValue = 0,
267  kGenFunc = 1,
268  kOneWord = 2 // for default values UP to one word in size
269 };
270 
274 };
275 
276 // This struct and corresponding overload to InitDefaultValue are used to
277 // facilitate usage of {} as default value in ABSL_FLAG macro.
278 // TODO(rogeeff): Fix handling types with explicit constructors.
279 struct EmptyBraces {};
280 
281 template <typename T>
282 constexpr T InitDefaultValue(T t) {
283  return t;
284 }
285 
286 template <typename T>
288  return T{};
289 }
290 
291 template <typename ValueT, typename GenT,
293  ((void)GenT{}, 0)>
294 constexpr FlagDefaultArg DefaultArg(int) {
295  return {FlagDefaultSrc(GenT{}.value), FlagDefaultKind::kOneWord};
296 }
297 
298 template <typename ValueT, typename GenT>
299 constexpr FlagDefaultArg DefaultArg(char) {
300  return {FlagDefaultSrc(&GenT::Gen), FlagDefaultKind::kGenFunc};
301 }
302 
304 // Flag current value auxiliary structs.
305 
307  return static_cast<int64_t>(0xababababababababll);
308 }
309 
310 template <typename T>
311 using FlagUseValueAndInitBitStorage = std::integral_constant<
314 
315 template <typename T>
316 using FlagUseOneWordStorage = std::integral_constant<
318  (sizeof(T) <= 8)>;
319 
320 template <class T>
321 using FlagUseSequenceLockStorage = std::integral_constant<
323  (sizeof(T) > 8)>;
324 
326  kValueAndInitBit = 0,
327  kOneWordAtomic = 1,
328  kSequenceLocked = 2,
329  kAlignedBuffer = 3,
330 };
331 
332 template <typename T>
333 static constexpr FlagValueStorageKind StorageKind() {
341 }
342 
344  constexpr explicit FlagOneWordValue(int64_t v) : value(v) {}
345  std::atomic<int64_t> value;
346 };
347 
348 template <typename T>
349 struct alignas(8) FlagValueAndInitBit {
351  // Use an int instead of a bool to guarantee that a non-zero value has
352  // a bit set.
354 };
355 
356 template <typename T,
357  FlagValueStorageKind Kind = flags_internal::StorageKind<T>()>
358 struct FlagValue;
359 
360 template <typename T>
362  constexpr FlagValue() : FlagOneWordValue(0) {}
363  bool Get(const SequenceLock&, T& dst) const {
364  int64_t storage = value.load(std::memory_order_acquire);
365  if (ABSL_PREDICT_FALSE(storage == 0)) {
366  return false;
367  }
368  dst = absl::bit_cast<FlagValueAndInitBit<T>>(storage).value;
369  return true;
370  }
371 };
372 
373 template <typename T>
376  bool Get(const SequenceLock&, T& dst) const {
377  int64_t one_word_val = value.load(std::memory_order_acquire);
378  if (ABSL_PREDICT_FALSE(one_word_val == UninitializedFlagValue())) {
379  return false;
380  }
381  std::memcpy(&dst, static_cast<const void*>(&one_word_val), sizeof(T));
382  return true;
383  }
384 };
385 
386 template <typename T>
388  bool Get(const SequenceLock& lock, T& dst) const {
389  return lock.TryRead(&dst, value_words, sizeof(T));
390  }
391 
392  static constexpr int kNumWords =
393  flags_internal::AlignUp(sizeof(T), sizeof(uint64_t)) / sizeof(uint64_t);
394 
395  alignas(T) alignas(
396  std::atomic<uint64_t>) std::atomic<uint64_t> value_words[kNumWords];
397 };
398 
399 template <typename T>
401  bool Get(const SequenceLock&, T&) const { return false; }
402 
403  alignas(T) char value[sizeof(T)];
404 };
405 
407 // Flag callback auxiliary structs.
408 
409 // Signature for the mutation callback used by watched Flags
410 // The callback is noexcept.
411 // TODO(rogeeff): add noexcept after C++17 support is added.
412 using FlagCallbackFunc = void (*)();
413 
414 struct FlagCallback {
416  absl::Mutex guard; // Guard for concurrent callback invocations.
417 };
418 
420 // Flag implementation, which does not depend on flag value type.
421 // The class encapsulates the Flag's data and access to it.
422 
424  explicit DynValueDeleter(FlagOpFn op_arg = nullptr);
425  void operator()(void* ptr) const;
426 
428 };
429 
430 class FlagState;
431 
432 class FlagImpl final : public CommandLineFlag {
433  public:
434  constexpr FlagImpl(const char* name, const char* filename, FlagOpFn op,
436  FlagDefaultArg default_arg)
437  : name_(name),
439  op_(op),
440  help_(help.source),
441  help_source_kind_(static_cast<uint8_t>(help.kind)),
442  value_storage_kind_(static_cast<uint8_t>(value_kind)),
443  def_kind_(static_cast<uint8_t>(default_arg.kind)),
444  modified_(false),
446  callback_(nullptr),
447  default_value_(default_arg.source),
448  data_guard_{} {}
449 
450  // Constant access methods
453  void Read(void* dst) const override ABSL_LOCKS_EXCLUDED(*DataGuard());
455  *value = ReadOneBool();
456  }
457  template <typename T,
460  int> = 0>
462  int64_t v = ReadOneWord();
463  std::memcpy(value, static_cast<const void*>(&v), sizeof(T));
464  }
465  template <typename T,
466  typename std::enable_if<flags_internal::StorageKind<T>() ==
468  int>::type = 0>
470  *value = absl::bit_cast<FlagValueAndInitBit<T>>(ReadOneWord()).value;
471  }
472 
473  // Mutating access methods
474  void Write(const void* src) ABSL_LOCKS_EXCLUDED(*DataGuard());
475 
476  // Interfaces to operate on callbacks.
477  void SetCallback(const FlagCallbackFunc mutation_callback)
480 
481  // Used in read/write operations to validate source/target has correct type.
482  // For example if flag is declared as absl::Flag<int> FLAGS_foo, a call to
483  // absl::GetFlag(FLAGS_foo) validates that the type of FLAGS_foo is indeed
484  // int. To do that we pass the "assumed" type id (which is deduced from type
485  // int) as an argument `type_id`, which is in turn is validated against the
486  // type id stored in flag object by flag definition statement.
487  void AssertValidType(FlagFastTypeId type_id,
488  const std::type_info* (*gen_rtti)()) const;
489 
490  private:
491  template <typename T>
492  friend class Flag;
493  friend class FlagState;
494 
495  // Ensures that `data_guard_` is initialized and returns it.
497  ABSL_LOCK_RETURNED(reinterpret_cast<absl::Mutex*>(data_guard_));
498  // Returns heap allocated value of type T initialized with default value.
499  std::unique_ptr<void, DynValueDeleter> MakeInitValue() const
501  // Flag initialization called via absl::call_once.
502  void Init();
503 
504  // Offset value access methods. One per storage kind. These methods to not
505  // respect const correctness, so be very carefull using them.
506 
507  // This is a shared helper routine which encapsulates most of the magic. Since
508  // it is only used inside the three routines below, which are defined in
509  // flag.cc, we can define it in that file as well.
510  template <typename StorageT>
511  StorageT* OffsetValue() const;
512  // This is an accessor for a value stored in an aligned buffer storage
513  // used for non-trivially-copyable data types.
514  // Returns a mutable pointer to the start of a buffer.
515  void* AlignedBufferValue() const;
516 
517  // The same as above, but used for sequencelock-protected storage.
518  std::atomic<uint64_t>* AtomicBufferValue() const;
519 
520  // This is an accessor for a value stored as one word atomic. Returns a
521  // mutable reference to an atomic value.
522  std::atomic<int64_t>& OneWordValue() const;
523 
524  // Attempts to parse supplied `value` string. If parsing is successful,
525  // returns new value. Otherwise returns nullptr.
526  std::unique_ptr<void, DynValueDeleter> TryParse(absl::string_view value,
527  std::string& err) const
529  // Stores the flag value based on the pointer to the source.
531 
532  // Copy the flag data, protected by `seq_lock_` into `dst`.
533  //
534  // REQUIRES: ValueStorageKind() == kSequenceLocked.
535  void ReadSequenceLockedData(void* dst) const
537 
539  return static_cast<FlagHelpKind>(help_source_kind_);
540  }
542  return static_cast<FlagValueStorageKind>(value_storage_kind_);
543  }
546  return static_cast<FlagDefaultKind>(def_kind_);
547  }
548 
549  // CommandLineFlag interface implementation
550  absl::string_view Name() const override;
551  std::string Filename() const override;
552  std::string Help() const override;
553  FlagFastTypeId TypeId() const override;
554  bool IsSpecifiedOnCommandLine() const override
556  std::string DefaultValue() const override ABSL_LOCKS_EXCLUDED(*DataGuard());
557  std::string CurrentValue() const override ABSL_LOCKS_EXCLUDED(*DataGuard());
562 
564 
565  // Interfaces to save and restore flags to/from persistent state.
566  // Returns current flag state or nullptr if flag does not support
567  // saving and restoring a state.
568  std::unique_ptr<FlagStateInterface> SaveState() override
570 
571  // Restores the flag state to the supplied state object. If there is
572  // nothing to restore returns false. Otherwise returns true.
573  bool RestoreState(const FlagState& flag_state)
575 
577  ValueSource source, std::string& error) override
579 
580  // Immutable flag's state.
581 
582  // Flags name passed to ABSL_FLAG as second arg.
584  // The file name where ABSL_FLAG resides.
586  // Type-specific operations "vtable".
588  // Help message literal or function to generate it.
590  // Indicates if help message was supplied as literal or generator func.
592  // Kind of storage this flag is using for the flag's value.
594 
595  uint8_t : 0; // The bytes containing the const bitfields must not be
596  // shared with bytes containing the mutable bitfields.
597 
598  // Mutable flag's state (guarded by `data_guard_`).
599 
600  // def_kind_ is not guard by DataGuard() since it is accessed in Init without
601  // locks.
603  // Has this flag's value been modified?
605  // Has this flag been specified on command line.
607 
608  // Unique tag for absl::call_once call to initialize this flag.
610 
611  // Sequence lock / mutation counter.
612  flags_internal::SequenceLock seq_lock_;
613 
614  // Optional flag's callback and absl::Mutex to guard the invocations.
615  FlagCallback* callback_ ABSL_GUARDED_BY(*DataGuard());
616  // Either a pointer to the function generating the default value based on the
617  // value specified in ABSL_FLAG or pointer to the dynamically set default
618  // value via SetCommandLineOptionWithMode. def_kind_ is used to distinguish
619  // these two cases.
621 
622  // This is reserved space for an absl::Mutex to guard flag data. It will be
623  // initialized in FlagImpl::Init via placement new.
624  // We can't use "absl::Mutex data_guard_", since this class is not literal.
625  // We do not want to use "absl::Mutex* data_guard_", since this would require
626  // heap allocation during initialization, which is both slows program startup
627  // and can fail. Using reserved space + placement new allows us to avoid both
628  // problems.
629  alignas(absl::Mutex) mutable char data_guard_[sizeof(absl::Mutex)];
630 };
631 
633 // The Flag object parameterized by the flag's value type. This class implements
634 // flag reflection handle interface.
635 
636 template <typename T>
637 class Flag {
638  public:
639  constexpr Flag(const char* name, const char* filename, FlagHelpArg help,
640  const FlagDefaultArg default_arg)
641  : impl_(name, filename, &FlagOps<T>, help,
642  flags_internal::StorageKind<T>(), default_arg),
643  value_() {}
644 
645  // CommandLineFlag interface
646  absl::string_view Name() const { return impl_.Name(); }
647  std::string Filename() const { return impl_.Filename(); }
648  std::string Help() const { return impl_.Help(); }
649  // Do not use. To be removed.
651  return impl_.IsSpecifiedOnCommandLine();
652  }
653  std::string DefaultValue() const { return impl_.DefaultValue(); }
654  std::string CurrentValue() const { return impl_.CurrentValue(); }
655 
656  private:
657  template <typename, bool>
658  friend class FlagRegistrar;
659  friend class FlagImplPeer;
660 
661  T Get() const {
662  // See implementation notes in CommandLineFlag::Get().
663  union U {
664  T value;
665  U() {}
666  ~U() { value.~T(); }
667  };
668  U u;
669 
670 #if !defined(NDEBUG)
671  impl_.AssertValidType(base_internal::FastTypeId<T>(), &GenRuntimeTypeId<T>);
672 #endif
673 
674  if (ABSL_PREDICT_FALSE(!value_.Get(impl_.seq_lock_, u.value))) {
675  impl_.Read(&u.value);
676  }
677  return std::move(u.value);
678  }
679  void Set(const T& v) {
680  impl_.AssertValidType(base_internal::FastTypeId<T>(), &GenRuntimeTypeId<T>);
681  impl_.Write(&v);
682  }
683 
684  // Access to the reflection.
685  const CommandLineFlag& Reflect() const { return impl_; }
686 
687  // Flag's data
688  // The implementation depends on value_ field to be placed exactly after the
689  // impl_ field, so that impl_ can figure out the offset to the value and
690  // access it.
693 };
694 
696 // Trampoline for friend access
697 
699  public:
700  template <typename T, typename FlagType>
701  static T InvokeGet(const FlagType& flag) {
702  return flag.Get();
703  }
704  template <typename FlagType, typename T>
705  static void InvokeSet(FlagType& flag, const T& v) {
706  flag.Set(v);
707  }
708  template <typename FlagType>
709  static const CommandLineFlag& InvokeReflect(const FlagType& f) {
710  return f.Reflect();
711  }
712 };
713 
715 // Implementation of Flag value specific operations routine.
716 template <typename T>
717 void* FlagOps(FlagOp op, const void* v1, void* v2, void* v3) {
718  switch (op) {
719  case FlagOp::kAlloc: {
720  std::allocator<T> alloc;
721  return std::allocator_traits<std::allocator<T>>::allocate(alloc, 1);
722  }
723  case FlagOp::kDelete: {
724  T* p = static_cast<T*>(v2);
725  p->~T();
726  std::allocator<T> alloc;
727  std::allocator_traits<std::allocator<T>>::deallocate(alloc, p, 1);
728  return nullptr;
729  }
730  case FlagOp::kCopy:
731  *static_cast<T*>(v2) = *static_cast<const T*>(v1);
732  return nullptr;
734  new (v2) T(*static_cast<const T*>(v1));
735  return nullptr;
736  case FlagOp::kSizeof:
737  return reinterpret_cast<void*>(static_cast<uintptr_t>(sizeof(T)));
738  case FlagOp::kFastTypeId:
739  return const_cast<void*>(base_internal::FastTypeId<T>());
741  return const_cast<std::type_info*>(GenRuntimeTypeId<T>());
742  case FlagOp::kParse: {
743  // Initialize the temporary instance of type T based on current value in
744  // destination (which is going to be flag's default value).
745  T temp(*static_cast<T*>(v2));
746  if (!absl::ParseFlag<T>(*static_cast<const absl::string_view*>(v1), &temp,
747  static_cast<std::string*>(v3))) {
748  return nullptr;
749  }
750  *static_cast<T*>(v2) = std::move(temp);
751  return v2;
752  }
753  case FlagOp::kUnparse:
754  *static_cast<std::string*>(v2) =
755  absl::UnparseFlag<T>(*static_cast<const T*>(v1));
756  return nullptr;
757  case FlagOp::kValueOffset: {
758  // Round sizeof(FlagImp) to a multiple of alignof(FlagValue<T>) to get the
759  // offset of the data.
760  size_t round_to = alignof(FlagValue<T>);
761  size_t offset =
762  (sizeof(FlagImpl) + round_to - 1) / round_to * round_to;
763  return reinterpret_cast<void*>(offset);
764  }
765  }
766  return nullptr;
767 }
768 
770 // This class facilitates Flag object registration and tail expression-based
771 // flag definition, for example:
772 // ABSL_FLAG(int, foo, 42, "Foo help").OnUpdate(NotifyFooWatcher);
774 template <typename T, bool do_register>
776  public:
777  explicit FlagRegistrar(Flag<T>& flag, const char* filename) : flag_(flag) {
778  if (do_register)
780  }
781 
783  flag_.impl_.SetCallback(cb);
784  return *this;
785  }
786 
787  // Make the registrar "die" gracefully as an empty struct on a line where
788  // registration happens. Registrar objects are intended to live only as
789  // temporary.
790  operator FlagRegistrarEmpty() const { return {}; } // NOLINT
791 
792  private:
793  Flag<T>& flag_; // Flag being registered (not owned).
794 };
795 
796 } // namespace flags_internal
798 } // namespace absl
799 
800 #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: abseil-cpp/absl/flags/internal/flag.h:777
fix_build_deps.temp
temp
Definition: fix_build_deps.py:488
absl::flags_internal::FlagDefaultSrc::FlagDefaultSrc
constexpr FlagDefaultSrc(FlagDfltGenFunc gen_func_arg)
Definition: abseil-cpp/absl/flags/internal/flag.h:252
absl::SetFlag
void SetFlag(absl::Flag< T > *flag, const T &v)
Definition: abseil-cpp/absl/flags/flag.h:110
absl::flags_internal::FlagImpl::ReadOneBool
bool ReadOneBool() const ABSL_LOCKS_EXCLUDED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.cc:479
absl::flags_internal::FlagValue< T, FlagValueStorageKind::kOneWordAtomic >::FlagValue
constexpr FlagValue()
Definition: abseil-cpp/absl/flags/internal/flag.h:375
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: abseil-cpp/absl/flags/internal/flag.h:685
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: abseil-cpp/absl/flags/internal/flag.h:648
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::FlagHelpArg::source
FlagHelpMsg source
Definition: abseil-cpp/absl/flags/internal/flag.h:214
absl::flags_internal::FlagRegistrar::flag_
Flag< T > & flag_
Definition: abseil-cpp/absl/flags/internal/flag.h:793
absl::flags_internal::FlagValueAndInitBit::init
uint8_t init
Definition: abseil-cpp/absl/flags/internal/flag.h:353
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: abseil-cpp/absl/flags/internal/flag.h:205
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: abseil-cpp/absl/flags/internal/flag.h:376
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::enable_if_t
typename std::enable_if< B, T >::type enable_if_t
Definition: abseil-cpp/absl/meta/type_traits.h:631
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: abseil-cpp/absl/flags/internal/flag.h:639
absl::flags_internal::FlagImpl::ValueStorageKind
FlagValueStorageKind ValueStorageKind() const
Definition: abseil-cpp/absl/flags/internal/flag.h:541
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: abseil-cpp/absl/flags/internal/flag.h:646
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::FlagValueAndInitBit::value
T value
Definition: abseil-cpp/absl/flags/internal/flag.h:350
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::ReadOneWord
int64_t ReadOneWord() const ABSL_LOCKS_EXCLUDED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.cc:471
absl::flags_internal::FlagImpl::DefaultKind
FlagDefaultKind DefaultKind() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.h:544
absl::flags_internal::InitDefaultValue
constexpr T InitDefaultValue(T t)
Definition: abseil-cpp/absl/flags/internal/flag.h:282
absl::flags_internal::FlagValue
Definition: abseil-cpp/absl/flags/internal/flag.h:358
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: abseil-cpp/absl/flags/internal/flag.h:709
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: abseil-cpp/absl/flags/internal/flag.h:679
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: abseil-cpp/absl/flags/internal/flag.h:650
absl::flags_internal::FlagValueStorageKind::kValueAndInitBit
@ kValueAndInitBit
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::flags_internal::FlagValue< T, FlagValueStorageKind::kValueAndInitBit >::FlagValue
constexpr FlagValue()
Definition: abseil-cpp/absl/flags/internal/flag.h:362
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: abseil-cpp/absl/flags/internal/flag.h:661
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: abseil-cpp/absl/flags/internal/flag.h:434
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: abseil-cpp/absl/flags/internal/flag.h:388
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: abseil-cpp/absl/flags/internal/flag.h:782
absl::flags_internal::FlagOneWordValue
Definition: abseil-cpp/absl/flags/internal/flag.h:343
absl::flags_internal::FlagValue< T, FlagValueStorageKind::kAlignedBuffer >::Get
bool Get(const SequenceLock &, T &) const
Definition: abseil-cpp/absl/flags/internal/flag.h:401
absl::flags_internal::FlagValueAndInitBit
Definition: abseil-cpp/absl/flags/internal/flag.h:349
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
absl::flags_internal::FlagOneWordValue::FlagOneWordValue
constexpr FlagOneWordValue(int64_t v)
Definition: abseil-cpp/absl/flags/internal/flag.h:344
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: abseil-cpp/absl/flags/internal/flag.h:701
absl::flags_internal::Flag::Filename
std::string Filename() const
Definition: abseil-cpp/absl/flags/internal/flag.h:647
absl::flags_internal::FlagUseSequenceLockStorage
std::integral_constant< bool, absl::type_traits_internal::is_trivially_copyable< T >::value &&(sizeof(T) > 8)> FlagUseSequenceLockStorage
Definition: abseil-cpp/absl/flags/internal/flag.h:323
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::flags_internal::FlagOp::kCopy
@ kCopy
absl::flags_internal::Flag::value_
FlagValue< T > value_
Definition: abseil-cpp/absl/flags/internal/flag.h:692
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: abseil-cpp/absl/flags/internal/flag.h:654
absl::flags_internal::FlagOp::kRuntimeTypeId
@ kRuntimeTypeId
absl::flags_internal::FlagImplPeer::InvokeSet
static void InvokeSet(FlagType &flag, const T &v)
Definition: abseil-cpp/absl/flags/internal/flag.h:705
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
absl::flags_internal::EmptyBraces
Definition: abseil-cpp/absl/flags/internal/flag.h:279
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::FlagOneWordValue::value
std::atomic< int64_t > value
Definition: abseil-cpp/absl/flags/internal/flag.h:345
absl::flags_internal::FlagValue< T, FlagValueStorageKind::kValueAndInitBit >::Get
bool Get(const SequenceLock &, T &dst) const
Definition: abseil-cpp/absl/flags/internal/flag.h:363
absl::flags_internal::FlagImpl::OffsetValue
StorageT * OffsetValue() const
Definition: abseil-cpp/absl/flags/internal/flag.cc:406
ABSL_FLAGS_INTERNAL_DFLT_FOR_TYPE
#define ABSL_FLAGS_INTERNAL_DFLT_FOR_TYPE(T, name)
Definition: abseil-cpp/absl/flags/internal/flag.h:255
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: abseil-cpp/absl/flags/internal/flag.h:653
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: abseil-cpp/absl/flags/internal/flag.h:186
absl::flags_internal::FlagImpl::Read
void Read(T *value) const ABSL_LOCKS_EXCLUDED(*DataGuard())
Definition: abseil-cpp/absl/flags/internal/flag.h:461
absl::flags_internal::Flag::impl_
FlagImpl impl_
Definition: abseil-cpp/absl/flags/internal/flag.h:691
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::FlagUseValueAndInitBitStorage
std::integral_constant< bool, absl::type_traits_internal::is_trivially_copyable< T >::value &&std::is_default_constructible< T >::value &&(sizeof(T)< 8)> FlagUseValueAndInitBitStorage
Definition: abseil-cpp/absl/flags/internal/flag.h:313
absl::flags_internal::FlagValueStorageKind::kAlignedBuffer
@ kAlignedBuffer
absl::flags_internal::FlagValueStorageKind::kSequenceLocked
@ kSequenceLocked
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::status_internal::storage
static ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES absl::base_internal::AtomicHook< StatusPayloadPrinter > storage
Definition: abseil-cpp/absl/status/status_payload_printer.cc:26
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::flags_internal::FlagHelpMsg::FlagHelpMsg
constexpr FlagHelpMsg(const char *help_msg)
Definition: abseil-cpp/absl/flags/internal/flag.h:204
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