diff options
| author | Alexander Karatarakis <alkarata@microsoft.com> | 2017-04-25 17:01:21 -0700 |
|---|---|---|
| committer | Alexander Karatarakis <alkarata@microsoft.com> | 2017-04-25 17:56:18 -0700 |
| commit | 1aef09ba58c725b1b0fe4e81efa5daa954cb9323 (patch) | |
| tree | 310386123ebd67eca18091760844d57aa688ee55 /toolsrc/include | |
| parent | 0a510471573400f708b553224671e66a3cd27e82 (diff) | |
| download | vcpkg-1aef09ba58c725b1b0fe4e81efa5daa954cb9323.tar.gz vcpkg-1aef09ba58c725b1b0fe4e81efa5daa954cb9323.zip | |
Rework OptBool enum
Diffstat (limited to 'toolsrc/include')
| -rw-r--r-- | toolsrc/include/OptBool.h | 43 | ||||
| -rw-r--r-- | toolsrc/include/PostBuildLint_BuildInfo.h | 2 | ||||
| -rw-r--r-- | toolsrc/include/VcpkgCmdArguments.h | 6 |
3 files changed, 33 insertions, 18 deletions
diff --git a/toolsrc/include/OptBool.h b/toolsrc/include/OptBool.h index 4098e6f03..b6b26833b 100644 --- a/toolsrc/include/OptBool.h +++ b/toolsrc/include/OptBool.h @@ -3,31 +3,46 @@ #include <string> #include <map> -namespace vcpkg::OptBool +namespace vcpkg { - enum class Type + struct OptBool final { - UNSPECIFIED = 0, - ENABLED, - DISABLED + enum class BackingEnum + { + UNSPECIFIED = 0, + ENABLED, + DISABLED + }; + + static OptBool parse(const std::string& s); + + template<class T> + static OptBool from_map(const std::map<T, std::string>& map, const T& key); + + constexpr OptBool() : backing_enum(BackingEnum::UNSPECIFIED) {} + constexpr explicit OptBool(BackingEnum backing_enum) : backing_enum(backing_enum) { } + constexpr operator BackingEnum() const { return backing_enum; } + + private: + BackingEnum backing_enum; }; - Type parse(const std::string& s); + namespace OptBoolC + { + constexpr OptBool UNSPECIFIED(OptBool::BackingEnum::UNSPECIFIED); + constexpr OptBool ENABLED(OptBool::BackingEnum::ENABLED); + constexpr OptBool DISABLED(OptBool::BackingEnum::DISABLED); + } - template <class T> - Type from_map(const std::map<T, std::string>& map, const T& key) + template<class T> + OptBool OptBool::from_map(const std::map<T, std::string>& map, const T& key) { auto it = map.find(key); if (it == map.cend()) { - return Type::UNSPECIFIED; + return OptBoolC::UNSPECIFIED; } return parse(*it); } } - -namespace vcpkg -{ - using OptBoolT = OptBool::Type; -}
\ No newline at end of file diff --git a/toolsrc/include/PostBuildLint_BuildInfo.h b/toolsrc/include/PostBuildLint_BuildInfo.h index 8aca14c7f..4dd1a3228 100644 --- a/toolsrc/include/PostBuildLint_BuildInfo.h +++ b/toolsrc/include/PostBuildLint_BuildInfo.h @@ -15,7 +15,7 @@ namespace vcpkg::PostBuildLint LinkageType::Type crt_linkage; LinkageType::Type library_linkage; - std::map<BuildPolicies, OptBoolT> policies; + std::map<BuildPolicies, OptBool> policies; }; BuildInfo read_build_info(const Files::Filesystem& fs, const fs::path& filepath); diff --git a/toolsrc/include/VcpkgCmdArguments.h b/toolsrc/include/VcpkgCmdArguments.h index 3a915205e..966ecfa16 100644 --- a/toolsrc/include/VcpkgCmdArguments.h +++ b/toolsrc/include/VcpkgCmdArguments.h @@ -14,9 +14,9 @@ namespace vcpkg std::unique_ptr<std::string> vcpkg_root_dir; std::unique_ptr<std::string> triplet; - OptBoolT debug = OptBoolT::UNSPECIFIED; - OptBoolT sendmetrics = OptBoolT::UNSPECIFIED; - OptBoolT printmetrics = OptBoolT::UNSPECIFIED; + OptBool debug = OptBoolC::UNSPECIFIED; + OptBool sendmetrics = OptBoolC::UNSPECIFIED; + OptBool printmetrics = OptBoolC::UNSPECIFIED; std::string command; std::vector<std::string> command_arguments; |
