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.
75 lines
1.5 KiB
C++
75 lines
1.5 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 "TagByteArray.h"
|
|
#include "TagString.h"
|
|
|
|
#include <QtCore/QDataStream>
|
|
|
|
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();
|
|
|
|
case TagByteArray::ID:
|
|
return new TagByteArray();
|
|
|
|
case TagString::ID:
|
|
return new TagString();
|
|
}
|
|
|
|
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;
|
|
} |