Go to the documentation of this file.
16 #ifndef ABSL_FLAGS_INTERNAL_FLAG_H_
17 #define ABSL_FLAGS_INTERNAL_FLAG_H_
27 #include <type_traits>
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"
52 namespace flags_internal {
57 #if defined(_MSC_VER) && !defined(__clang__)
62 using Flag = flags_internal::Flag<T>;
71 template <
typename T,
typename V>
81 namespace flags_internal {
139 return static_cast<size_t>(
reinterpret_cast<intptr_t>(
149 return reinterpret_cast<const std::type_info*
>(
159 return static_cast<ptrdiff_t
>(
reinterpret_cast<intptr_t>(
164 template <
typename T>
166 #ifdef ABSL_INTERNAL_HAS_RTTI
185 template <
size_t...
I>
192 template <
typename Gen,
size_t N =
Gen::Value().size()>
198 template <
typename Gen>
234 template <
typename Gen,
size_t N>
239 template <
typename Gen>
255 #define ABSL_FLAGS_INTERNAL_DFLT_FOR_TYPE(T, name) \
257 constexpr explicit FlagDefaultSrc(T value) : name##_value(value) {} // NOLINT
259 #undef ABSL_FLAGS_INTERNAL_DFLT_FOR_TYPE
281 template <
typename T>
286 template <
typename T>
291 template <
typename ValueT,
typename GenT,
298 template <
typename ValueT,
typename GenT>
307 return static_cast<int64_t>(0xababababababababll);
310 template <
typename T>
315 template <
typename T>
332 template <
typename T>
348 template <
typename T>
356 template <
typename T,
360 template <
typename T>
373 template <
typename T>
377 int64_t one_word_val =
value.load(std::memory_order_acquire);
386 template <
typename T>
392 static constexpr
int kNumWords =
396 std::atomic<uint64_t>) std::atomic<uint64_t> value_words[kNumWords];
399 template <
typename T>
457 template <
typename T,
465 template <
typename T,
466 typename std::enable_if<flags_internal::StorageKind<T>() ==
651 return impl_.IsSpecifiedOnCommandLine();
657 template <
typename,
bool>
671 impl_.AssertValidType(base_internal::FastTypeId<T>(), &GenRuntimeTypeId<T>);
680 impl_.AssertValidType(base_internal::FastTypeId<T>(), &GenRuntimeTypeId<T>);
700 template <
typename T,
typename FlagType>
704 template <
typename FlagType,
typename T>
708 template <
typename FlagType>
716 template <
typename T>
720 std::allocator<T>
alloc;
721 return std::allocator_traits<std::allocator<T>>::allocate(
alloc, 1);
724 T* p =
static_cast<T*
>(v2);
726 std::allocator<T>
alloc;
727 std::allocator_traits<std::allocator<T>>::deallocate(
alloc, p, 1);
731 *
static_cast<T*
>(v2) = *
static_cast<const T*
>(v1);
734 new (v2)
T(*
static_cast<const T*
>(v1));
737 return reinterpret_cast<void*
>(
static_cast<uintptr_t>(
sizeof(
T)));
739 return const_cast<void*
>(base_internal::FastTypeId<T>());
741 return const_cast<std::type_info*
>(GenRuntimeTypeId<T>());
745 T temp(*
static_cast<T*
>(v2));
755 absl::UnparseFlag<T>(*
static_cast<const T*
>(v1));
762 (
sizeof(
FlagImpl) + round_to - 1) / round_to * round_to;
763 return reinterpret_cast<void*
>(
offset);
774 template <
typename T,
bool do_register>
800 #endif // ABSL_FLAGS_INTERNAL_FLAG_H_
const uint8_t value_storage_kind_
#define ABSL_PREDICT_FALSE(x)
const CommandLineFlag & GetFlagReflectionHandle(const absl::Flag< T > &f)
void CheckDefaultValueParsingRoundtrip() const override ABSL_LOCKS_EXCLUDED(*DataGuard())
flags_internal::SequenceLock seq_lock_
OPENSSL_EXPORT const ASN1_OBJECT * obj
size_t Sizeof(FlagOpFn op)
int64_t ModificationCount() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard())
FlagRegistrar(Flag< T > &flag, const char *filename)
constexpr FlagDefaultSrc(FlagDfltGenFunc gen_func_arg)
void SetFlag(absl::Flag< T > *flag, const T &v)
bool ReadOneBool() const ABSL_LOCKS_EXCLUDED(*DataGuard())
bool RegisterCommandLineFlag(CommandLineFlag &, const char *filename)
const CommandLineFlag & Reflect() const
FlagDefaultSrc default_value_
void * FlagOps(FlagOp op, const void *v1, void *v2, void *v3)
std::string DefaultValue() const override ABSL_LOCKS_EXCLUDED(*DataGuard())
FlagHelpKind HelpSourceKind() const
void SetCallback(const FlagCallbackFunc mutation_callback) ABSL_LOCKS_EXCLUDED(*DataGuard())
std::string Help() const override
std::string CurrentValue() const override ABSL_LOCKS_EXCLUDED(*DataGuard())
absl::string_view Name() const override
bool RestoreState(const FlagState &flag_state) ABSL_LOCKS_EXCLUDED(*DataGuard())
absl::base_internal::FastTypeIdType FlagFastTypeId
std::string Unparse(FlagOpFn op, const void *val)
integral_constant< bool, false > false_type
constexpr int64_t UninitializedFlagValue()
constexpr FlagHelpMsg(HelpGenFunc help_gen)
OPENSSL_EXPORT pem_password_cb void * u
const char kStrippedFlagHelp[]
bool Get(const SequenceLock &, T &dst) const
constexpr size_t AlignUp(size_t x, size_t align)
constexpr FixedCharArray< N+1 > HelpStringAsArray(int)
void(*)() FlagCallbackFunc
std::integral_constant< bool, absl::type_traits_internal::is_trivially_copyable< T >::value &&(sizeof(T)<=8)> FlagUseOneWordStorage
typename std::enable_if< B, T >::type enable_if_t
#define ABSL_NAMESPACE_END
void(*)(void *) FlagDfltGenFunc
constexpr Flag(const char *name, const char *filename, FlagHelpArg help, const FlagDefaultArg default_arg)
FlagValueStorageKind ValueStorageKind() const
#define T(upbtypeconst, upbtype, ctype, default_value)
absl::string_view Name() const
std::string(*)() HelpGenFunc
std::unique_ptr< FlagStateInterface > SaveState() override ABSL_LOCKS_EXCLUDED(*DataGuard())
int64_t ReadOneWord() const ABSL_LOCKS_EXCLUDED(*DataGuard())
FlagDefaultKind DefaultKind() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard())
constexpr T InitDefaultValue(T t)
#define ABSL_MUST_USE_RESULT
bool ParseFrom(absl::string_view value, FlagSettingMode set_mode, ValueSource source, std::string &error) override ABSL_LOCKS_EXCLUDED(*DataGuard())
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
#define ABSL_NAMESPACE_BEGIN
FlagFastTypeId FastTypeId(FlagOpFn op)
std::string Filename() const override
static ABSL_CONST_INIT std::string *program_name ABSL_GUARDED_BY(program_name_guard)
static const CommandLineFlag & InvokeReflect(const FlagType &f)
void Write(const void *src) ABSL_LOCKS_EXCLUDED(*DataGuard())
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
void * Clone(FlagOpFn op, const void *obj)
bool IsSpecifiedOnCommandLine() const
std::shared_ptr< ExternalConnectionAcceptorImpl > impl_
make_integer_sequence< size_t, N > make_index_sequence
#define ABSL_LOCK_RETURNED(x)
#define ABSL_EXCLUSIVE_LOCKS_REQUIRED(...)
unsigned __int64 uint64_t
void AssertValidType(FlagFastTypeId type_id, const std::type_info *(*gen_rtti)()) const
bool TryRead(void *dst, const std::atomic< uint64_t > *src, size_t size) const
std::atomic< int64_t > & OneWordValue() const
constexpr FlagImpl(const char *name, const char *filename, FlagOpFn op, FlagHelpArg help, FlagValueStorageKind value_kind, FlagDefaultArg default_arg)
std::unique_ptr< void, DynValueDeleter > TryParse(absl::string_view value, std::string &err) const ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard())
ABSL_MUST_USE_RESULT T GetFlag(const absl::Flag< T > &flag)
bool Parse(FlagOpFn op, absl::string_view text, void *dst, std::string *error)
void * Alloc(FlagOpFn op)
_W64 unsigned int uintptr_t
FlagCallback *callback_ ABSL_GUARDED_BY * DataGuard()
constexpr FlagHelpArg HelpArg(const FixedCharArray< N > &value)
flags_internal::Flag< T > Flag
bool Get(const SequenceLock &lock, T &dst) const
const uint8_t help_source_kind_
FlagRegistrar OnUpdate(FlagCallbackFunc cb) &&
bool Get(const SequenceLock &, T &) const
const std::type_info * GenRuntimeTypeId()
#define ABSL_FLAGS_INTERNAL_BUILTIN_TYPES(A)
bool IsSpecifiedOnCommandLine() const override ABSL_LOCKS_EXCLUDED(*DataGuard())
std::atomic< uint64_t > * AtomicBufferValue() const
char data_guard_[sizeof(absl::Mutex)]
void Delete(FlagOpFn op, void *obj)
void CopyConstruct(FlagOpFn op, const void *src, void *dst)
constexpr FlagOneWordValue(int64_t v)
FlagFastTypeId TypeId() const override
void Read(void *dst) const override ABSL_LOCKS_EXCLUDED(*DataGuard())
static T InvokeGet(const FlagType &flag)
std::string Filename() const
std::integral_constant< bool, absl::type_traits_internal::is_trivially_copyable< T >::value &&(sizeof(T) > 8)> FlagUseSequenceLockStorage
#define ABSL_LOCKS_EXCLUDED(...)
void ReadSequenceLockedData(void *dst) const ABSL_LOCKS_EXCLUDED(*DataGuard())
bool ValidateInputValue(absl::string_view value) const override ABSL_LOCKS_EXCLUDED(*DataGuard())
const char *const filename_
absl::once_flag init_control_
ptrdiff_t ValueOffset(FlagOpFn op)
static constexpr FlagValueStorageKind StorageKind()
std::string CurrentValue() const
static void InvokeSet(FlagType &flag, const T &v)
absl::Mutex *DataGuard() const ABSL_LOCK_RETURNED(reinterpret_cast< absl std::unique_ptr< void, DynValueDeleter > MakeInitValue() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard())
DynValueDeleter(FlagOpFn op_arg=nullptr)
void *(*)(FlagOp, const void *, void *, void *) FlagOpFn
class PROTOBUF_EXPORT alignas(8) Arena final
std::atomic< int64_t > value
bool Get(const SequenceLock &, T &dst) const
StorageT * OffsetValue() const
#define ABSL_FLAGS_INTERNAL_DFLT_FOR_TYPE(T, name)
const std::type_info * RuntimeTypeId(FlagOpFn op)
std::string DefaultValue() const
void operator()(void *ptr) const
static constexpr FixedCharArray< N > FromLiteralString(absl::string_view str, absl::index_sequence< I... >)
void Read(T *value) const ABSL_LOCKS_EXCLUDED(*DataGuard())
void * AlignedBufferValue() const
std::integral_constant< bool, absl::type_traits_internal::is_trivially_copyable< T >::value &&std::is_default_constructible< T >::value &&(sizeof(T)< 8)> FlagUseValueAndInitBitStorage
void StoreValue(const void *src) ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard())
static ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES absl::base_internal::AtomicHook< StatusPayloadPrinter > storage
std::allocator< int > alloc
OPENSSL_EXPORT pem_password_cb * cb
void Copy(FlagOpFn op, const void *src, void *dst)
constexpr FlagHelpMsg(const char *help_msg)
constexpr FlagDefaultArg DefaultArg(int)
void InvokeCallback() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard())
grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:24