24 #ifndef ARM_COMPUTE_UTILS_ENUMLISTOPTION
25 #define ARM_COMPUTE_UTILS_ENUMLISTOPTION
28 #include <initializer_list>
57 EnumListOption(std::string
name, std::set<T> allowed_values, std::initializer_list<T> &&default_values);
60 std::string
help()
const override;
66 const std::vector<T> &
value()
const;
69 std::vector<T> _values{};
70 std::set<T> _allowed_values{};
75 :
Option{std::move(
name)}, _allowed_values{std::move(allowed_values)}
81 std::set<T> allowed_values,
82 std::initializer_list<T> &&default_values)
84 _values{std::forward<std::initializer_list<T>>(default_values)},
85 _allowed_values{std::move(allowed_values)}
96 std::stringstream stream{value};
99 while (!std::getline(stream, item,
',').fail())
103 std::stringstream item_stream(item);
106 item_stream >> typed_value;
108 if (!item_stream.fail())
110 if (_allowed_values.count(typed_value) == 0)
116 _values.emplace_back(typed_value);
119 _is_set = _is_set && !item_stream.fail();
121 catch (
const std::invalid_argument &)
130 template <
typename T>
133 std::stringstream msg;
134 msg <<
"--" +
name() +
"={";
136 for (
const auto &value : _allowed_values)
141 msg <<
"}[,{...}[,...]] - " << _help;
146 template <
typename T>