3#include "mc/_HeaderOutputPredefine.h"
4#include "mc/world/actor/DataItem.h"
7 requires(DataItem::TypeList::contains<T>)
15 [[nodiscard]] ::DataItem::ID getId()
const override;
17 [[nodiscard]] ::DataItemType getType()
const override;
19 [[nodiscard]]
bool isDataEqual(
::DataItem const&)
const override;
21 [[nodiscard]] ::std::unique_ptr<::DataItem> clone()
const override;
24 [[nodiscard]]
constexpr T
const& value()
const {
return mValue; }
26 [[nodiscard]]
constexpr T& value() {
return mValue; }
28 [[nodiscard]]
constexpr explicit operator T
const&()
const {
return mValue; }
30 [[nodiscard]]
constexpr explicit operator T&() {
return mValue; }
33 constexpr void setData(T2&& value) {
41 template <
class... Args>
42 constexpr explicit DataItem2(::DataItem::ID key, Args&&... args)
43 : mType((::DataItemType)
DataItem::TypeList::index<T>),
45 mValue(
std::forward<Args>(args)...) {}
49 requires(DataItem::TypeList::contains<T>)
51 if (getType() == (::DataItemType)TypeList::index<T>)
return ((
DataItem2<T>*)
this)->mValue;
56 requires(DataItem::TypeList::contains<T>)
58 if (getType() == (::DataItemType)TypeList::index<T>)
return ((
DataItem2<T>*)
this)->mValue;
63 requires(DataItem::TypeList::contains<std::remove_cvref_t<T>>)
64constexpr bool DataItem::setData(T&& value) {
65 if (getType() == (::DataItemType)TypeList::index<T>)
return false;
71 requires(DataItem::TypeList::contains<std::remove_cvref_t<T>>)
72LL_CONSTEXPR23 std::unique_ptr<DataItem> DataItem::create(::DataItem::ID key, T&& value) {
73 return std::make_unique<DataItem2<std::remove_cvref_t<T>>>(key, std::forward<T>(value));
Definition optional_ref.h:10