23 #include "ngraph/check.hpp"
29 template <
typename EnumType>
34 static EnumType
as_enum(
const std::string& name)
36 auto to_lower = [](
const std::string& s) {
38 std::transform(rc.begin(), rc.end(), rc.begin(), [](
char c) {
39 return static_cast<char>(::tolower(static_cast<int>(c)));
43 for (
auto p : get().m_string_enums)
45 if (to_lower(p.first) == to_lower(name))
50 NGRAPH_CHECK(
false,
"\"", name,
"\"",
" is not a member of enum ", get().m_enum_name);
56 for (
auto& p : get().m_string_enums)
63 NGRAPH_CHECK(
false,
" invalid member of enum ", get().m_enum_name);
69 const std::vector<std::pair<std::string, EnumType>> string_enums)
70 : m_enum_name(enum_name)
71 , m_string_enums(string_enums)
76 static EnumNames<EnumType>& get();
78 const std::string m_enum_name;
79 std::vector<std::pair<std::string, EnumType>> m_string_enums;
83 template <
typename Type,
typename Value>
84 typename std::enable_if<std::is_convertible<Value, std::string>::value, Type>::type
91 template <
typename Value>
Definition: enum_names.hpp:31
static const std::string & as_string(EnumType e)
Converts enum values to strings.
Definition: enum_names.hpp:54
static EnumType as_enum(const std::string &name)
Converts strings to enum values.
Definition: enum_names.hpp:34
The Intel nGraph C++ API.
Definition: attribute_adapter.hpp:28
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:85
const std::string & as_string(Value value)
Returns the string matching the enum value.
Definition: enum_names.hpp:92