From a987bbe0b9380b518c8e83817331c55a45b65118 Mon Sep 17 00:00:00 2001 From: Julien Rosset Date: Fri, 2 Oct 2020 19:56:56 +0200 Subject: [PATCH] Create all numeric tags --- CMakeLists.txt | 5 +++++ NBT/AbstractTag.cpp | 27 +++++++++++++++++++++++++++ NBT/TagDouble.cpp | 16 ++++++++++++++++ NBT/TagDouble.h | 20 ++++++++++++++++++++ NBT/TagFloat.cpp | 16 ++++++++++++++++ NBT/TagFloat.h | 21 +++++++++++++++++++++ NBT/TagInt.cpp | 16 ++++++++++++++++ NBT/TagInt.h | 20 ++++++++++++++++++++ NBT/TagLong.cpp | 16 ++++++++++++++++ NBT/TagLong.h | 20 ++++++++++++++++++++ NBT/TagShort.cpp | 16 ++++++++++++++++ NBT/TagShort.h | 20 ++++++++++++++++++++ 12 files changed, 213 insertions(+) create mode 100644 NBT/TagDouble.cpp create mode 100644 NBT/TagDouble.h create mode 100644 NBT/TagFloat.cpp create mode 100644 NBT/TagFloat.h create mode 100644 NBT/TagInt.cpp create mode 100644 NBT/TagInt.h create mode 100644 NBT/TagLong.cpp create mode 100644 NBT/TagLong.h create mode 100644 NBT/TagShort.cpp create mode 100644 NBT/TagShort.h diff --git a/CMakeLists.txt b/CMakeLists.txt index db20a94..fc58679 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,5 +25,10 @@ add_executable( NBT/AbstractNamedTag.h NBT/AbstractNamedTag.cpp NBT/TagEnd.cpp NBT/TagEnd.h NBT/TagByte.cpp NBT/TagByte.h + NBT/TagShort.cpp NBT/TagShort.h + NBT/TagInt.cpp NBT/TagInt.h + NBT/TagLong.cpp NBT/TagLong.h + NBT/TagFloat.cpp NBT/TagFloat.h + NBT/TagDouble.cpp NBT/TagDouble.h ) target_link_libraries(NBTModifier Qt5::Widgets Qt5::Svg) \ No newline at end of file diff --git a/NBT/AbstractTag.cpp b/NBT/AbstractTag.cpp index 29eb2a2..f700908 100644 --- a/NBT/AbstractTag.cpp +++ b/NBT/AbstractTag.cpp @@ -2,6 +2,11 @@ #include "TagEnd.h" #include "TagByte.h" +#include "TagShort.h" +#include "TagInt.h" +#include "TagLong.h" +#include "TagFloat.h" +#include "TagDouble.h" #include @@ -19,9 +24,31 @@ AbstractTag *AbstractTag::fromData(QDataStream &data, bool *ok) { switch (id) { case TagEnd::ID: tag = new TagEnd(); + break; case TagByte::ID: tag = new TagByte(); + break; + + case TagShort::ID: + tag = new TagShort(); + break; + + case TagInt::ID: + tag = new TagInt(); + break; + + case TagLong::ID: + tag = new TagLong(); + break; + + case TagFloat::ID: + tag = new TagFloat(); + break; + + case TagDouble::ID: + tag = new TagDouble(); + break; } if (tag == nullptr) { return nullptr; diff --git a/NBT/TagDouble.cpp b/NBT/TagDouble.cpp new file mode 100644 index 0000000..2fb8514 --- /dev/null +++ b/NBT/TagDouble.cpp @@ -0,0 +1,16 @@ +#include "TagDouble.h" + +#include +#include + +TagDouble::TagDouble(const double value) : AbstractNamedTag(ID), m_value(value) {} + +bool const TagDouble::readPayloadFromData(QDataStream &data) { + data >> m_value; + m_value = qFromBigEndian(m_value); + return true; +} +bool const TagDouble::writePayloadToData(QDataStream &data) const { + data << qToBigEndian(m_value); + return true; +} \ No newline at end of file diff --git a/NBT/TagDouble.h b/NBT/TagDouble.h new file mode 100644 index 0000000..b95f749 --- /dev/null +++ b/NBT/TagDouble.h @@ -0,0 +1,20 @@ +#ifndef NBTMODIFIER_TAGDOUBLE_H +#define NBTMODIFIER_TAGDOUBLE_H + +#include "AbstractNamedTag.h" + +class TagDouble : public AbstractNamedTag { +public: + static constexpr quint8 ID = 6; + + TagDouble(const double value = 0); + +protected: + virtual bool const readPayloadFromData(QDataStream &data) override; + virtual bool const writePayloadToData(QDataStream &data) const override; + +private: + double m_value; +}; + +#endif //NBTMODIFIER_TAGDOUBLE_H diff --git a/NBT/TagFloat.cpp b/NBT/TagFloat.cpp new file mode 100644 index 0000000..ddc2c9b --- /dev/null +++ b/NBT/TagFloat.cpp @@ -0,0 +1,16 @@ +#include "TagFloat.h" + +#include +#include + +TagFloat::TagFloat(const float value) : AbstractNamedTag(ID), m_value(value) {} + +bool const TagFloat::readPayloadFromData(QDataStream &data) { + data >> m_value; + m_value = qFromBigEndian(m_value); + return true; +} +bool const TagFloat::writePayloadToData(QDataStream &data) const { + data << qToBigEndian(m_value); + return true; +} \ No newline at end of file diff --git a/NBT/TagFloat.h b/NBT/TagFloat.h new file mode 100644 index 0000000..c38e655 --- /dev/null +++ b/NBT/TagFloat.h @@ -0,0 +1,21 @@ +#ifndef NBTMODIFIER_TAGFLOAT_H +#define NBTMODIFIER_TAGFLOAT_H + +#include +#include "AbstractNamedTag.h" + +class TagFloat : public AbstractNamedTag { +public: + static constexpr quint8 ID = 5; + + TagFloat(const float value = 0); + +protected: + virtual bool const readPayloadFromData(QDataStream &data) override; + virtual bool const writePayloadToData(QDataStream &data) const override; + +private: + float m_value; +}; + +#endif //NBTMODIFIER_TAGFLOAT_H diff --git a/NBT/TagInt.cpp b/NBT/TagInt.cpp new file mode 100644 index 0000000..e3f1a67 --- /dev/null +++ b/NBT/TagInt.cpp @@ -0,0 +1,16 @@ +#include "TagInt.h" + +#include +#include + +TagInt::TagInt(const qint32 value) : AbstractNamedTag(ID), m_value(value) {} + +bool const TagInt::readPayloadFromData(QDataStream &data) { + data >> m_value; + m_value = qFromBigEndian(m_value); + return true; +} +bool const TagInt::writePayloadToData(QDataStream &data) const { + data << qToBigEndian(m_value); + return true; +} \ No newline at end of file diff --git a/NBT/TagInt.h b/NBT/TagInt.h new file mode 100644 index 0000000..d524add --- /dev/null +++ b/NBT/TagInt.h @@ -0,0 +1,20 @@ +#ifndef NBTMODIFIER_TAGINT_H +#define NBTMODIFIER_TAGINT_H + +#include "AbstractNamedTag.h" + +class TagInt : public AbstractNamedTag { +public: + static constexpr quint8 ID = 3; + + TagInt(const qint32 value = 0); + +protected: + virtual bool const readPayloadFromData(QDataStream &data) override; + virtual bool const writePayloadToData(QDataStream &data) const override; + +private: + qint32 m_value; +}; + +#endif //NBTMODIFIER_TAGINT_H diff --git a/NBT/TagLong.cpp b/NBT/TagLong.cpp new file mode 100644 index 0000000..36b7741 --- /dev/null +++ b/NBT/TagLong.cpp @@ -0,0 +1,16 @@ +#include "TagLong.h" + +#include +#include + +TagLong::TagLong(const qint64 value) : AbstractNamedTag(ID), m_value(value) {} + +bool const TagLong::readPayloadFromData(QDataStream &data) { + data >> m_value; + m_value = qFromBigEndian(m_value); + return true; +} +bool const TagLong::writePayloadToData(QDataStream &data) const { + data << qToBigEndian(m_value); + return true; +} \ No newline at end of file diff --git a/NBT/TagLong.h b/NBT/TagLong.h new file mode 100644 index 0000000..c0b3b17 --- /dev/null +++ b/NBT/TagLong.h @@ -0,0 +1,20 @@ +#ifndef NBTMODIFIER_TAGLONG_H +#define NBTMODIFIER_TAGLONG_H + +#include "AbstractNamedTag.h" + +class TagLong : public AbstractNamedTag { +public: + static constexpr quint8 ID = 4; + + TagLong(const qint64 value = 0); + +protected: + virtual bool const readPayloadFromData(QDataStream &data) override; + virtual bool const writePayloadToData(QDataStream &data) const override; + +private: + qint64 m_value; +}; + +#endif //NBTMODIFIER_TAGLONG_H diff --git a/NBT/TagShort.cpp b/NBT/TagShort.cpp new file mode 100644 index 0000000..1b85073 --- /dev/null +++ b/NBT/TagShort.cpp @@ -0,0 +1,16 @@ +#include "TagShort.h" + +#include +#include + +TagShort::TagShort(const qint16 value) : AbstractNamedTag(ID), m_value(value) {} + +bool const TagShort::readPayloadFromData(QDataStream &data) { + data >> m_value; + m_value = qFromBigEndian(m_value); + return true; +} +bool const TagShort::writePayloadToData(QDataStream &data) const { + data << qToBigEndian(m_value); + return true; +} \ No newline at end of file diff --git a/NBT/TagShort.h b/NBT/TagShort.h new file mode 100644 index 0000000..46b6627 --- /dev/null +++ b/NBT/TagShort.h @@ -0,0 +1,20 @@ +#ifndef NBTMODIFIER_TAGSHORT_H +#define NBTMODIFIER_TAGSHORT_H + +#include "AbstractNamedTag.h" + +class TagShort : public AbstractNamedTag { +public: + static constexpr quint8 ID = 2; + + TagShort(const qint16 value = 0); + +protected: + virtual bool const readPayloadFromData(QDataStream &data) override; + virtual bool const writePayloadToData(QDataStream &data) const override; + +private: + qint16 m_value; +}; + +#endif //NBTMODIFIER_TAGSHORT_H