diff options
author | Abseil Team <absl-team@google.com> | 2020-06-04 14:05:55 -0700 |
---|---|---|
committer | Gennadiy Rozental <rogeeff@google.com> | 2020-06-04 20:17:52 -0400 |
commit | a8b03d90e0afe03fefa16d4a871ece344a5d52ad (patch) | |
tree | 6f36a6a3eb64b3aed28bce3512453b4519c6f478 /absl/flags/reflection.h | |
parent | 1d31b5c365e975d3c8a8f90492c3d9de35ef024f (diff) |
Export of internal Abseil changes
--
5b9d5ce21074c0541432555d383d1b9c5898b553 by Gennadiy Rozental <rogeeff@google.com>:
Convert FlagSaver into public API
PiperOrigin-RevId: 314799739
--
5f796c9862b1177f161f4b10fe1a84698ebbb5cf by Abseil Team <absl-team@google.com>:
Google-internal changes only.
PiperOrigin-RevId: 314786474
--
67f2ae0ac5ae73bcd9d57a058ac4fea8fc1243ba by Gennadiy Rozental <rogeeff@google.com>:
Makes sure stacktrace_generic is only used with glibc.
Fixes #701
PiperOrigin-RevId: 314726944
--
efb1ef3636b0698b79d3ee3590f12c4dff32a3cb by Samuel Benzaquen <sbenza@google.com>:
Take the bits into account when reserving the space for the operation, not just
the exponent.
PiperOrigin-RevId: 314622744
GitOrigin-RevId: 5b9d5ce21074c0541432555d383d1b9c5898b553
Change-Id: I080a5e333e2dc1545b5aa0417882f7ac7116a20c
Diffstat (limited to 'absl/flags/reflection.h')
-rw-r--r-- | absl/flags/reflection.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/absl/flags/reflection.h b/absl/flags/reflection.h index e8e24f68..045f9784 100644 --- a/absl/flags/reflection.h +++ b/absl/flags/reflection.h @@ -31,6 +31,9 @@ namespace absl { ABSL_NAMESPACE_BEGIN +namespace flags_internal { +class FlagSaverImpl; +} // namespace flags_internal // FindCommandLineFlag() // @@ -39,6 +42,41 @@ ABSL_NAMESPACE_BEGIN // 'retired' flag is specified. CommandLineFlag* FindCommandLineFlag(absl::string_view name); +//------------------------------------------------------------------------------ +// FlagSaver +//------------------------------------------------------------------------------ +// +// A FlagSaver object stores the state of flags in the scope where the FlagSaver +// is defined, allowing modification of those flags within that scope and +// automatic restoration of the flags to their previous state upon leaving the +// scope. +// +// A FlagSaver can be used within tests to temporarily change the test +// environment and restore the test case to its previous state. +// +// Example: +// +// void MyFunc() { +// absl::FlagSaver fs; +// ... +// absl::SetFlag(FLAGS_myFlag, otherValue); +// ... +// } // scope of FlagSaver left, flags return to previous state +// +// This class is thread-safe. + +class FlagSaver { + public: + FlagSaver(); + ~FlagSaver(); + + FlagSaver(const FlagSaver&) = delete; + void operator=(const FlagSaver&) = delete; + + private: + flags_internal::FlagSaverImpl* impl_; +}; + //----------------------------------------------------------------------------- ABSL_NAMESPACE_END |