Rework LinkageType enum

This commit is contained in:
Alexander Karatarakis 2017-04-25 17:11:21 -07:00
parent 09b9340515
commit 003693c5ac
6 changed files with 59 additions and 56 deletions

View File

@ -12,8 +12,8 @@ namespace vcpkg::PostBuildLint
{ {
static BuildInfo create(std::unordered_map<std::string, std::string> pgh); static BuildInfo create(std::unordered_map<std::string, std::string> pgh);
LinkageType::Type crt_linkage; LinkageType crt_linkage;
LinkageType::Type library_linkage; LinkageType library_linkage;
std::map<BuildPolicies, OptBool> policies; std::map<BuildPolicies, OptBool> policies;
}; };

View File

@ -18,30 +18,30 @@ namespace vcpkg::PostBuildLint::BuildType
{ {
Type() = delete; Type() = delete;
constexpr explicit Type(const BackingEnum backing_enum, const ConfigurationType::Type config, const LinkageType::Type linkage) : constexpr explicit Type(const BackingEnum backing_enum, const ConfigurationType::Type config, const LinkageType linkage) :
backing_enum(backing_enum), m_config(config), m_linkage(linkage) { } backing_enum(backing_enum), m_config(config), m_linkage(linkage) { }
constexpr operator BackingEnum() const { return backing_enum; } constexpr operator BackingEnum() const { return backing_enum; }
const ConfigurationType::Type& config() const; const ConfigurationType::Type& config() const;
const LinkageType::Type& linkage() const; const LinkageType& linkage() const;
const std::regex& crt_regex() const; const std::regex& crt_regex() const;
const std::string& to_string() const; const std::string& to_string() const;
private: private:
BackingEnum backing_enum; BackingEnum backing_enum;
ConfigurationType::Type m_config; ConfigurationType::Type m_config;
LinkageType::Type m_linkage; LinkageType m_linkage;
}; };
static const std::string ENUM_NAME = "vcpkg::PostBuildLint::BuildType"; static const std::string ENUM_NAME = "vcpkg::PostBuildLint::BuildType";
static constexpr Type DEBUG_STATIC = Type(BackingEnum::DEBUG_STATIC, ConfigurationType::DEBUG, LinkageType::STATIC); static constexpr Type DEBUG_STATIC = Type(BackingEnum::DEBUG_STATIC, ConfigurationType::DEBUG, LinkageTypeC::STATIC);
static constexpr Type DEBUG_DYNAMIC = Type(BackingEnum::DEBUG_DYNAMIC, ConfigurationType::DEBUG, LinkageType::DYNAMIC); static constexpr Type DEBUG_DYNAMIC = Type(BackingEnum::DEBUG_DYNAMIC, ConfigurationType::DEBUG, LinkageTypeC::DYNAMIC);
static constexpr Type RELEASE_STATIC = Type(BackingEnum::RELEASE_STATIC, ConfigurationType::RELEASE, LinkageType::STATIC); static constexpr Type RELEASE_STATIC = Type(BackingEnum::RELEASE_STATIC, ConfigurationType::RELEASE, LinkageTypeC::STATIC);
static constexpr Type RELEASE_DYNAMIC = Type(BackingEnum::RELEASE_DYNAMIC, ConfigurationType::RELEASE, LinkageType::DYNAMIC); static constexpr Type RELEASE_DYNAMIC = Type(BackingEnum::RELEASE_DYNAMIC, ConfigurationType::RELEASE, LinkageTypeC::DYNAMIC);
static constexpr std::array<Type, 4> values = { DEBUG_STATIC, DEBUG_DYNAMIC, RELEASE_STATIC, RELEASE_DYNAMIC }; static constexpr std::array<Type, 4> values = { DEBUG_STATIC, DEBUG_DYNAMIC, RELEASE_STATIC, RELEASE_DYNAMIC };
Type value_of(const ConfigurationType::Type& config, const LinkageType::Type& linkage); Type value_of(const ConfigurationType::Type& config, const LinkageType& linkage);
} }

View File

@ -1,7 +1,9 @@
#pragma once #pragma once
#include <string> #include <string>
namespace vcpkg::PostBuildLint::LinkageType namespace vcpkg::PostBuildLint
{
struct LinkageType final
{ {
enum class BackingEnum enum class BackingEnum
{ {
@ -10,10 +12,10 @@ namespace vcpkg::PostBuildLint::LinkageType
STATIC STATIC
}; };
struct Type static LinkageType value_of(const std::string& as_string);
{
constexpr Type() : backing_enum(BackingEnum::NULLVALUE) {} constexpr LinkageType() : backing_enum(BackingEnum::NULLVALUE) {}
constexpr explicit Type(BackingEnum backing_enum) : backing_enum(backing_enum) { } constexpr explicit LinkageType(BackingEnum backing_enum) : backing_enum(backing_enum) { }
constexpr operator BackingEnum() const { return backing_enum; } constexpr operator BackingEnum() const { return backing_enum; }
const std::string& to_string() const; const std::string& to_string() const;
@ -22,13 +24,14 @@ namespace vcpkg::PostBuildLint::LinkageType
BackingEnum backing_enum; BackingEnum backing_enum;
}; };
static const std::string ENUM_NAME = "vcpkg::PostBuildLint::LinkageType"; namespace LinkageTypeC
{
static constexpr const char* ENUM_NAME = "vcpkg::PostBuildLint::LinkageType";
static constexpr Type NULLVALUE(BackingEnum::NULLVALUE); static constexpr LinkageType NULLVALUE(LinkageType::BackingEnum::NULLVALUE);
static constexpr Type DYNAMIC(BackingEnum::DYNAMIC); static constexpr LinkageType DYNAMIC(LinkageType::BackingEnum::DYNAMIC);
static constexpr Type STATIC(BackingEnum::STATIC); static constexpr LinkageType STATIC(LinkageType::BackingEnum::STATIC);
static constexpr std::array<Type, 2> values = { DYNAMIC, STATIC }; static constexpr std::array<LinkageType, 2> VALUES = { DYNAMIC, STATIC };
}
Type value_of(const std::string& as_string);
} }

View File

@ -19,11 +19,11 @@ namespace vcpkg::PostBuildLint
BuildInfo build_info; BuildInfo build_info;
const std::string crt_linkage_as_string = details::remove_required_field(&pgh, BuildInfoRequiredField::CRT_LINKAGE); const std::string crt_linkage_as_string = details::remove_required_field(&pgh, BuildInfoRequiredField::CRT_LINKAGE);
build_info.crt_linkage = LinkageType::value_of(crt_linkage_as_string); build_info.crt_linkage = LinkageType::value_of(crt_linkage_as_string);
Checks::check_exit(VCPKG_LINE_INFO, build_info.crt_linkage != LinkageType::NULLVALUE, "Invalid crt linkage type: [%s]", crt_linkage_as_string); Checks::check_exit(VCPKG_LINE_INFO, build_info.crt_linkage != LinkageTypeC::NULLVALUE, "Invalid crt linkage type: [%s]", crt_linkage_as_string);
const std::string library_linkage_as_string = details::remove_required_field(&pgh, BuildInfoRequiredField::LIBRARY_LINKAGE); const std::string library_linkage_as_string = details::remove_required_field(&pgh, BuildInfoRequiredField::LIBRARY_LINKAGE);
build_info.library_linkage = LinkageType::value_of(library_linkage_as_string); build_info.library_linkage = LinkageType::value_of(library_linkage_as_string);
Checks::check_exit(VCPKG_LINE_INFO, build_info.library_linkage != LinkageType::NULLVALUE, "Invalid library linkage type: [%s]", library_linkage_as_string); Checks::check_exit(VCPKG_LINE_INFO, build_info.library_linkage != LinkageTypeC::NULLVALUE, "Invalid library linkage type: [%s]", library_linkage_as_string);
// The remaining entries are policies // The remaining entries are policies
for (const std::unordered_map<std::string, std::string>::value_type& p : pgh) for (const std::unordered_map<std::string, std::string>::value_type& p : pgh)

View File

@ -4,24 +4,24 @@
namespace vcpkg::PostBuildLint::BuildType namespace vcpkg::PostBuildLint::BuildType
{ {
Type value_of(const ConfigurationType::Type& config, const LinkageType::Type& linkage) Type value_of(const ConfigurationType::Type& config, const LinkageType& linkage)
{ {
if (config == ConfigurationType::DEBUG && linkage == LinkageType::STATIC) if (config == ConfigurationType::DEBUG && linkage == LinkageTypeC::STATIC)
{ {
return DEBUG_STATIC; return DEBUG_STATIC;
} }
if (config == ConfigurationType::DEBUG && linkage == LinkageType::DYNAMIC) if (config == ConfigurationType::DEBUG && linkage == LinkageTypeC::DYNAMIC)
{ {
return DEBUG_DYNAMIC; return DEBUG_DYNAMIC;
} }
if (config == ConfigurationType::RELEASE && linkage == LinkageType::STATIC) if (config == ConfigurationType::RELEASE && linkage == LinkageTypeC::STATIC)
{ {
return RELEASE_STATIC; return RELEASE_STATIC;
} }
if (config == ConfigurationType::RELEASE && linkage == LinkageType::DYNAMIC) if (config == ConfigurationType::RELEASE && linkage == LinkageTypeC::DYNAMIC)
{ {
return RELEASE_DYNAMIC; return RELEASE_DYNAMIC;
} }
@ -34,7 +34,7 @@ namespace vcpkg::PostBuildLint::BuildType
return this->m_config; return this->m_config;
} }
const LinkageType::Type& Type::linkage() const const LinkageType& Type::linkage() const
{ {
return this->m_linkage; return this->m_linkage;
} }

View File

@ -3,40 +3,40 @@
#include "vcpkg_Enums.h" #include "vcpkg_Enums.h"
#include "vcpkg_Checks.h" #include "vcpkg_Checks.h"
namespace vcpkg::PostBuildLint::LinkageType namespace vcpkg::PostBuildLint
{ {
static const std::string NULLVALUE_STRING = Enums::nullvalue_to_string(ENUM_NAME); static const std::string NULLVALUE_STRING = Enums::nullvalue_to_string(LinkageTypeC::ENUM_NAME);
static const std::string NAME_DYNAMIC = "dynamic"; static const std::string NAME_DYNAMIC = "dynamic";
static const std::string NAME_STATIC = "static"; static const std::string NAME_STATIC = "static";
const std::string& Type::to_string() const LinkageType LinkageType::value_of(const std::string& as_string)
{
if (as_string == NAME_DYNAMIC)
{
return LinkageTypeC::DYNAMIC;
}
if (as_string == NAME_STATIC)
{
return LinkageTypeC::STATIC;
}
return LinkageTypeC::NULLVALUE;
}
const std::string& LinkageType::to_string() const
{ {
switch (this->backing_enum) switch (this->backing_enum)
{ {
case LinkageType::DYNAMIC: case LinkageTypeC::DYNAMIC:
return NAME_DYNAMIC; return NAME_DYNAMIC;
case LinkageType::STATIC: case LinkageTypeC::STATIC:
return NAME_STATIC; return NAME_STATIC;
case LinkageType::NULLVALUE: case LinkageTypeC::NULLVALUE:
return NULLVALUE_STRING; return NULLVALUE_STRING;
default: default:
Checks::unreachable(VCPKG_LINE_INFO); Checks::unreachable(VCPKG_LINE_INFO);
} }
} }
Type value_of(const std::string& as_string)
{
if (as_string == NAME_DYNAMIC)
{
return LinkageType::DYNAMIC;
}
if (as_string == NAME_STATIC)
{
return LinkageType::STATIC;
}
return LinkageType::NULLVALUE;
}
} }