#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; } AbstractTag *AbstractTag::fromData(QDataStream &data, bool *ok) { quint8 id; data >> id; AbstractTag *tag = nullptr; 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; } *ok = tag->readFromData(data); return tag; } QByteArray AbstractTag::toData(bool *ok) { QByteArray data; QDataStream stream(data); stream << id(); *ok = writeToData(stream); return data; }