11 #include "ngraph/check.hpp"
17 template <
typename EnumType>
22 static EnumType
as_enum(
const std::string& name)
24 auto to_lower = [](
const std::string& s) {
26 std::transform(rc.begin(), rc.end(), rc.begin(), [](
char c) {
27 return static_cast<char>(::tolower(static_cast<int>(c)));
31 for (
auto p : get().m_string_enums)
33 if (to_lower(p.first) == to_lower(name))
38 NGRAPH_CHECK(
false,
"\"", name,
"\"",
" is not a member of enum ", get().m_enum_name);
44 for (
auto& p : get().m_string_enums)
51 NGRAPH_CHECK(
false,
" invalid member of enum ", get().m_enum_name);
57 const std::vector<std::pair<std::string, EnumType>> string_enums)
58 : m_enum_name(enum_name)
59 , m_string_enums(string_enums)
64 static EnumNames<EnumType>& get();
66 const std::string m_enum_name;
67 std::vector<std::pair<std::string, EnumType>> m_string_enums;
71 template <
typename Type,
typename Value>
72 typename std::enable_if<std::is_convertible<Value, std::string>::value, Type>::type
79 template <
typename Value>
Definition: enum_names.hpp:19
static const std::string & as_string(EnumType e)
Converts enum values to strings.
Definition: enum_names.hpp:42
static EnumType as_enum(const std::string &name)
Converts strings to enum values.
Definition: enum_names.hpp:22
The Intel nGraph C++ API.
Definition: attribute_adapter.hpp:16
std::enable_if< std::is_convertible< Value, std::string >::value, Type >::type as_enum(const Value &value)
Returns the enum value matching the string.
Definition: enum_names.hpp:73
const std::string & as_string(Value value)
Returns the string matching the enum value.
Definition: enum_names.hpp:80