28 #ifndef __RTTR_ENUMERATION_CONTAINER_H__
29 #define __RTTR_ENUMERATION_CONTAINER_H__
37 #include <type_traits>
44 template<
typename EnumType>
45 class enumeration_container :
public enumeration_container_base
48 enumeration_container(
const type declaring_type, std::vector< std::pair<std::string, EnumType> > data)
49 : enumeration_container_base(declaring_type),
50 _keyToValue(move(data))
52 static_assert(std::is_enum<EnumType>::value,
"No enum type provided, please create an instance of this class only for enum types!");
55 type get_type()
const {
return type::get<EnumType>(); }
56 type get_underlying_type()
const {
return type::get<typename std::underlying_type<EnumType>::type>(); }
58 std::vector<std::string> get_keys()
const
60 std::vector<std::string> result;
61 for (
const auto& item : _keyToValue)
63 result.push_back(item.first);
68 std::vector<variant> get_values()
const
70 std::vector<variant> result;
71 for (
const auto& item : _keyToValue)
73 result.push_back(item.second);
78 std::string value_to_key(detail::argument& value)
const
80 if (!value.is_type<EnumType>() &&
81 !value.is_type<
typename std::underlying_type<EnumType>::type>())
86 EnumType enum_value = value.get_value<EnumType>();
87 for (
const auto& item : _keyToValue)
89 if (item.second == enum_value)
95 variant key_to_value(
const std::string& key)
const
100 for (
const auto& item : _keyToValue)
102 if (item.first == key)
109 std::vector<std::pair<std::string, EnumType> > _keyToValue;
117 #endif // __RTTR_CONSTRUCTOR_CONTAINER_H__