#include "AbstractTag.h" #include "TagEnd.h" #include "TagByte.h" #include "TagShort.h" #include "TagInt.h" #include "TagLong.h" #include "TagFloat.h" #include "TagDouble.h" #include AbstractTag::AbstractTag(const quint8 id) : m_id(id) {} const quint8 AbstractTag::id() const { return m_id; } const quint8 AbstractTag::extractId(const QByteArray &data) { QDataStream stream(data); quint8 id; stream >> id; return id; } AbstractTag *AbstractTag::extractEmptyTag(const QByteArray &data) { switch (extractId(data)) { case TagEnd::ID: return new TagEnd(); case TagByte::ID: return new TagByte(); case TagShort::ID: return new TagShort(); case TagInt::ID: return new TagInt(); case TagLong::ID: return new TagLong(); case TagFloat::ID: return new TagFloat(); case TagDouble::ID: return new TagDouble(); } return nullptr; } QDataStream &operator<<(QDataStream &data, const AbstractTag &tag) { data << tag.id(); tag.writeToData(data); return data; } QDataStream &operator>>(QDataStream &data, AbstractTag &tag) { quint8 id; data >> id; tag.readFromData(data); return data; }