11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
21PROMEKI_NAMESPACE_BEGIN
67 PROMEKI_DATATYPE(EnumList, DataTypeEnumList, 1)
78 Error writeToStream(DataStream &s) const;
80 template <uint32_t V> static Result<EnumList> readFromStream(DataStream &s);
89 explicit EnumList(Enum::Type type) : _type(type) {}
103 template <
typename T>
static EnumList forType() {
return EnumList(T::Type); }
110 Enum::Type elementType()
const {
return _type; }
113 bool isValid()
const {
return _type.isValid(); }
116 size_t size()
const {
return _values.size(); }
119 bool isEmpty()
const {
return _values.isEmpty(); }
122 void clear() { _values.clear(); }
138 bool append(
const Enum &e, Error *err =
nullptr);
147 bool append(
int value, Error *err =
nullptr);
156 bool append(
const String &name, Error *err =
nullptr);
166 Enum at(
size_t i)
const {
return Enum(_type, _values[i]); }
169 Enum operator[](
size_t i)
const {
return at(i); }
172 const List<int> &values()
const {
return _values; }
187 EnumList uniqueSorted()
const;
213 String toString()
const;
236 static Result<EnumList> fromString(
const String &text);
245 bool operator==(
const EnumList &o)
const {
return _type == o._type && _values == o._values; }
246 bool operator!=(
const EnumList &o)
const {
return !(*
this == o); }
255PROMEKI_FORMAT_VIA_TOSTRING(promeki::EnumList);