22#ifndef ANTARES_DATA_ENUM_HXX
23#define ANTARES_DATA_ENUM_HXX
28#include <antares/exception/AssertionError.hpp>
29#include <antares/stdcxx/class_name.h>
30#include "antares/antares/Enum.hpp"
32namespace Antares::Data::Enum
34template<
typename E,
typename>
35E fromString(
const std::string& name)
37 const auto& names = getNames<E>();
38 const auto& it = std::find(names.begin(), names.end(), name);
39 if (it == names.end())
41 throw AssertionError(
"Unexpected " + stdcxx::simpleClassName<E>() +
" name " + name);
44 return static_cast<E
>(it - names.begin());
47template<
typename E,
typename>
48std::string toString(
const E& value)
50 auto index =
static_cast<unsigned long>(value);
51 const auto& names = getNames<E>();
52 if (index >= names.size())
54 throw AssertionError(
"Unexpected " + stdcxx::simpleClassName<E>() +
" value "
55 + std::to_string(index));
57 return *(names.begin() + index);
60template<
typename E,
typename>
61std::list<E> enumList()
64 const auto& names = getNames<E>();
65 for (
auto name: names)
67 result.push_back(fromString<E>(name));