aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/include
diff options
context:
space:
mode:
authorAlexander Karatarakis <alkarata@microsoft.com>2017-04-25 17:01:21 -0700
committerAlexander Karatarakis <alkarata@microsoft.com>2017-04-25 17:56:18 -0700
commit1aef09ba58c725b1b0fe4e81efa5daa954cb9323 (patch)
tree310386123ebd67eca18091760844d57aa688ee55 /toolsrc/include
parent0a510471573400f708b553224671e66a3cd27e82 (diff)
downloadvcpkg-1aef09ba58c725b1b0fe4e81efa5daa954cb9323.tar.gz
vcpkg-1aef09ba58c725b1b0fe4e81efa5daa954cb9323.zip
Rework OptBool enum
Diffstat (limited to 'toolsrc/include')
-rw-r--r--toolsrc/include/OptBool.h43
-rw-r--r--toolsrc/include/PostBuildLint_BuildInfo.h2
-rw-r--r--toolsrc/include/VcpkgCmdArguments.h6
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;