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

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