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++
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;
|
|
} |