#include "bigendianreader.h"
#include <QDebug>
using namespace Protocol::IO;
BigEndianReader::BigEndianReader(const QByteArray &buffer)
: _buffer(buffer), _position(0)
{
}
char BigEndianReader::readByte()
{
if(_position == _buffer.size()) {
qWarning() << "BigEndianReader: read overflow." << _position;
return 0;
}
return _buffer.at(_position++);
}
unsigned char BigEndianReader::readUnsignedByte()
{
union {
char c;
unsigned char uc;
} u;
u.c = readByte();
return u.uc;
}
bool BigEndianReader::readBoolean()
{
return (readByte() != 0);
}
short BigEndianReader::readShort()
{
return read<qint16>();
}
ushort BigEndianReader::readUnsignedShort()
{
return read<quint16>();
}
int BigEndianReader::readInt()
{
return read<qint32>();
}
uint BigEndianReader::readUnsignedInt()
{
return read<quint32>();
}
float BigEndianReader::readFloat()
{
return read<float>();
}
double BigEndianReader::readDouble()
{
return read<double>();
}
QByteArray BigEndianReader::readBytes(int size)
{
QByteArray bytes;
for(int i = 0; i < size; i++) {
bytes.append( readByte() );
}
return bytes;
}
QString BigEndianReader::readUTF()
{
unsigned short size = readUnsignedShort();
return QString::fromUtf8( readBytes(size) );
}
const QByteArray &BigEndianReader::data() const
{
return _buffer;
}