#ifndef NBTMODIFIER_ABSTRACTTAG_H #define NBTMODIFIER_ABSTRACTTAG_H #include class QDataStream; /** * Interface for all NBT tags */ class AbstractTag { public: const quint8 id() const; static const quint8 extractId(const QByteArray &data); static AbstractTag *extractEmptyTag(const QByteArray &data); friend QDataStream &operator<<(QDataStream &data, const AbstractTag &tag); friend QDataStream &operator>>(QDataStream &data, AbstractTag &tag); protected: /** * Create a new tag * * @param id */ explicit AbstractTag(const quint8 id); /** * Read a tag from a data stream * * @param data The data stream * * @return True if read is success, otherwise false */ virtual void readFromData(QDataStream &data) = 0; /** * Write a tag to a data stream * * @param data The data stream * * @return True if write is success, otherwise false */ virtual void writeToData(QDataStream &data) const = 0; private: /** * The tag's ID */ const quint8 m_id; }; #endif //NBTMODIFIER_ABSTRACTTAG_H