commandlineflag.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. #ifndef ABSL_FLAGS_INTERNAL_COMMANDLINEFLAG_H_
  16. #define ABSL_FLAGS_INTERNAL_COMMANDLINEFLAG_H_
  17. #include "absl/base/config.h"
  18. #include "absl/base/internal/fast_type_id.h"
  19. namespace absl {
  20. ABSL_NAMESPACE_BEGIN
  21. namespace flags_internal {
  22. // An alias for flag fast type id. This value identifies the flag value type
  23. // similarly to typeid(T), without relying on RTTI being available. In most
  24. // cases this id is enough to uniquely identify the flag's value type. In a few
  25. // cases we'll have to resort to using actual RTTI implementation if it is
  26. // available.
  27. using FlagFastTypeId = absl::base_internal::FastTypeIdType;
  28. // Options that control SetCommandLineOptionWithMode.
  29. enum FlagSettingMode {
  30. // update the flag's value unconditionally (can call this multiple times).
  31. SET_FLAGS_VALUE,
  32. // update the flag's value, but *only if* it has not yet been updated
  33. // with SET_FLAGS_VALUE, SET_FLAG_IF_DEFAULT, or "FLAGS_xxx = nondef".
  34. SET_FLAG_IF_DEFAULT,
  35. // set the flag's default value to this. If the flag has not been updated
  36. // yet (via SET_FLAGS_VALUE, SET_FLAG_IF_DEFAULT, or "FLAGS_xxx = nondef")
  37. // change the flag's current value to the new default value as well.
  38. SET_FLAGS_DEFAULT
  39. };
  40. // Options that control ParseFrom: Source of a value.
  41. enum ValueSource {
  42. // Flag is being set by value specified on a command line.
  43. kCommandLine,
  44. // Flag is being set by value specified in the code.
  45. kProgrammaticChange,
  46. };
  47. // Handle to FlagState objects. Specific flag state objects will restore state
  48. // of a flag produced this flag state from method CommandLineFlag::SaveState().
  49. class FlagStateInterface {
  50. public:
  51. virtual ~FlagStateInterface();
  52. // Restores the flag originated this object to the saved state.
  53. virtual void Restore() const = 0;
  54. };
  55. } // namespace flags_internal
  56. ABSL_NAMESPACE_END
  57. } // namespace absl
  58. #endif // ABSL_FLAGS_INTERNAL_COMMANDLINEFLAG_H_