24 requires(DataItem::TypeList::contains<T>)
27 requires(DataItem::TypeList::contains<T>)
30 requires(DataItem::TypeList::contains<std::remove_cvref_t<T>>)
31 constexpr bool setData(T&& value);
34 requires(DataItem::TypeList::contains<std::remove_cvref_t<T>>)
35 [[nodiscard]]
static LL_CONSTEXPR23 std::unique_ptr<DataItem> create(ushort key, T&& value);
36 [[nodiscard]]
static LL_CONSTEXPR23 std::unique_ptr<DataItem> create(ushort key,
bool value) {
37 return create(key, (schar)value);
40 requires(DataItem::TypeList::contains<std::remove_cvref_t<T>>)
41 [[nodiscard]]
static LL_CONSTEXPR23 std::unique_ptr<DataItem> create(::ActorDataIDs key, T&& value) {
42 return create(
static_cast<std::underlying_type_t<::ActorDataIDs>
>(key), std::forward<T>(value));
44 [[nodiscard]]
static LL_CONSTEXPR23 std::unique_ptr<DataItem> create(::ActorDataIDs key,
bool value) {
45 return create(key, (schar)value);
58 virtual ushort getId()
const = 0;
61 virtual ::DataItemType getType()
const = 0;
64 virtual bool isDataEqual(
::DataItem const&)
const = 0;
67 virtual ::std::unique_ptr<::DataItem> clone()
const = 0;
92 [[nodiscard]] ::DataItem::ID getId()
const override;
94 [[nodiscard]] ::DataItemType getType()
const override;
96 [[nodiscard]]
bool isDataEqual(
::DataItem const&)
const override;
98 [[nodiscard]] ::std::unique_ptr<::DataItem> clone()
const override;
101 [[nodiscard]]
constexpr T
const& value()
const {
return mValue; }
103 [[nodiscard]]
constexpr T& value() {
return mValue; }
105 [[nodiscard]]
constexpr explicit operator T
const&()
const {
return mValue; }
107 [[nodiscard]]
constexpr explicit operator T&() {
return mValue; }
110 constexpr void setData(T2&& value) {
118 template <
class... Args>
119 constexpr explicit DataItem2(::DataItem::ID key, Args&&... args)
120 : mType((::DataItemType)
DataItem::TypeList::index<T>),
122 mValue(
std::forward<Args>(args)...) {}