#include "absl/flags/internal/flag.h"
#include <assert.h>
#include <stddef.h>
#include <stdint.h>
#include <string.h>
#include <array>
#include <atomic>
#include <cstring>
#include <memory>
#include <string>
#include <typeinfo>
#include <vector>
#include "absl/base/attributes.h"
#include "absl/base/call_once.h"
#include "absl/base/casts.h"
#include "absl/base/config.h"
#include "absl/base/const_init.h"
#include "absl/base/dynamic_annotations.h"
#include "absl/base/optimization.h"
#include "absl/flags/config.h"
#include "absl/flags/internal/commandlineflag.h"
#include "absl/flags/usage_config.h"
#include "absl/memory/memory.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
#include "absl/synchronization/mutex.h"
namespace absl {
ABSL_NAMESPACE_BEGIN
namespace flags_internal {
const char kStrippedFlagHelp[] = …;
namespace {
bool ShouldValidateFlagValue(FlagFastTypeId flag_type_id) { … }
class MutexRelock { … };
ABSL_CONST_INIT absl::Mutex s_freelist_guard(absl::kConstInit);
ABSL_CONST_INIT std::vector<void*>* s_freelist = …;
void AddToFreelist(void* p) { … }
}
uint64_t NumLeakedFlagValues() { … }
class FlagImpl;
class FlagState : public flags_internal::FlagStateInterface { … };
DynValueDeleter::DynValueDeleter(FlagOpFn op_arg) : … { … }
void DynValueDeleter::operator()(void* ptr) const { … }
MaskedPointer::MaskedPointer(ptr_t rhs, bool is_candidate) : … { … }
bool MaskedPointer::IsUnprotectedReadCandidate() const { … }
bool MaskedPointer::HasBeenRead() const { … }
void MaskedPointer::Set(FlagOpFn op, const void* src, bool is_candidate) { … }
void MaskedPointer::MarkAsRead() { … }
void MaskedPointer::ApplyMask(mask_t mask) { … }
bool MaskedPointer::CheckMask(mask_t mask) const { … }
void FlagImpl::Init() { … }
absl::Mutex* FlagImpl::DataGuard() const { … }
void FlagImpl::AssertValidType(FlagFastTypeId rhs_type_id,
const std::type_info* (*gen_rtti)()) const { … }
std::unique_ptr<void, DynValueDeleter> FlagImpl::MakeInitValue() const { … }
void FlagImpl::StoreValue(const void* src, ValueSource source) { … }
absl::string_view FlagImpl::Name() const { … }
std::string FlagImpl::Filename() const { … }
std::string FlagImpl::Help() const { … }
FlagFastTypeId FlagImpl::TypeId() const { … }
int64_t FlagImpl::ModificationCount() const { … }
bool FlagImpl::IsSpecifiedOnCommandLine() const { … }
std::string FlagImpl::DefaultValue() const { … }
std::string FlagImpl::CurrentValue() const { … }
void FlagImpl::SetCallback(const FlagCallbackFunc mutation_callback) { … }
void FlagImpl::InvokeCallback() const { … }
std::unique_ptr<FlagStateInterface> FlagImpl::SaveState() { … }
bool FlagImpl::RestoreState(const FlagState& flag_state) { … }
template <typename StorageT>
StorageT* FlagImpl::OffsetValue() const { … }
std::atomic<uint64_t>* FlagImpl::AtomicBufferValue() const { … }
std::atomic<int64_t>& FlagImpl::OneWordValue() const { … }
std::atomic<MaskedPointer>& FlagImpl::PtrStorage() const { … }
std::unique_ptr<void, DynValueDeleter> FlagImpl::TryParse(
absl::string_view value, std::string& err) const { … }
void FlagImpl::Read(void* dst) const { … }
int64_t FlagImpl::ReadOneWord() const { … }
bool FlagImpl::ReadOneBool() const { … }
void FlagImpl::ReadSequenceLockedData(void* dst) const { … }
void FlagImpl::Write(const void* src) { … }
bool FlagImpl::ParseFrom(absl::string_view value, FlagSettingMode set_mode,
ValueSource source, std::string& err) { … }
void FlagImpl::CheckDefaultValueParsingRoundtrip() const { … }
bool FlagImpl::ValidateInputValue(absl::string_view value) const { … }
}
ABSL_NAMESPACE_END
}