You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
1.3 KiB
C++

#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 <QtCore/QDataStream>
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;
}