3#include "mc/_HeaderOutputPredefine.h"
6#include "mc/platform/Result.h"
15enum class SnbtFormat : uint {
17 CompoundLineFeed = 1 << 0,
18 ArrayLineFeed = 1 << 1,
23 CommentMarks = 1 << 6,
24 Jsonify = ForceQuote | CommentMarks,
25 PartialLineFeed = CompoundLineFeed,
26 AlwaysLineFeed = CompoundLineFeed | ArrayLineFeed,
27 PrettyFilePrint = PartialLineFeed,
28 PrettyChatPrint = PrettyFilePrint | Colored,
29 PrettyConsolePrint = PrettyFilePrint | Colored | Console,
31[[nodiscard]]
constexpr SnbtFormat operator|(SnbtFormat
const l, SnbtFormat
const r)
noexcept {
32 return static_cast<SnbtFormat
>(
33 static_cast<std::underlying_type_t<SnbtFormat>
>(l) |
static_cast<std::underlying_type_t<SnbtFormat>
>(r)
36[[nodiscard]]
constexpr SnbtFormat operator&(SnbtFormat
const l, SnbtFormat
const r)
noexcept {
37 return static_cast<SnbtFormat
>(
38 static_cast<std::underlying_type_t<SnbtFormat>
>(l) &
static_cast<std::underlying_type_t<SnbtFormat>
>(r)
44 constexpr Tag() =
default;
48 enum class Type : uchar {
65 template <std::derived_from<Tag> T>
66 T
const* as_ptr()
const {
67 return static_cast<T const*
>(
this);
69 template <std::derived_from<Tag> T>
71 return static_cast<T*
>(
this);
73 template <std::derived_from<Tag> T>
75 return *
static_cast<T const*
>(
this);
77 template <std::derived_from<Tag> T>
79 return *
static_cast<T*
>(
this);
82 [[nodiscard]]
bool operator==(Tag
const& other)
const {
return equals(other); }
84 LLNDAPI std::string toSnbt(SnbtFormat snbtFormat = SnbtFormat::PrettyFilePrint, uchar indent = 4)
const noexcept;
89 virtual ~Tag() =
default;
91 virtual void deleteChildren();
95 virtual ::Bedrock::Result<void> load(
::IDataInput& dis) = 0;
97 virtual ::std::string toString()
const = 0;
99 virtual ::Tag::Type getId()
const = 0;
101 virtual bool equals(::Tag
const& rhs)
const = 0;
105 virtual void print(::std::string
const& prefix,
::PrintStream& out)
const;
107 virtual ::std::unique_ptr<::Tag> copy()
const = 0;
109 virtual uint64 hash()
const = 0;
115 MCAPI static ::Bedrock::Result<::std::unique_ptr<::Tag>> newTag(::Tag::Type type);
121 MCFOLD
void $deleteChildren();
125 MCAPI
void $print(::std::string
const& prefix,
::PrintStream& out)
const;
Definition IDataOutput.h:5
Definition PrintStream.h:5