/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.

For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#include "storage/serialize_common.h"

namespace Serialize {

ByteArrayWriter::ByteArrayWriter(int expectedSize)
: _stream(&_result, QIODevice::WriteOnly) {
	if (expectedSize) {
		_result.reserve(expectedSize);
	}
	_stream.setVersion(QDataStream::Qt_5_1);
}

QByteArray ByteArrayWriter::result() && {
	_stream.device()->close();
	return std::move(_result);
}

ByteArrayReader::ByteArrayReader(QByteArray data)
: _data(std::move(data))
, _stream(&_data, QIODevice::ReadOnly) {
	_stream.setVersion(QDataStream::Qt_5_1);
}

void writeColor(QDataStream &stream, const QColor &color) {
	stream << (quint32(uchar(color.red()))
		| (quint32(uchar(color.green())) << 8)
		| (quint32(uchar(color.blue())) << 16)
		| (quint32(uchar(color.alpha())) << 24));
}

QColor readColor(QDataStream &stream) {
	auto value = quint32();
	stream >> value;
	return QColor(
		int(value & 0xFFU),
		int((value >> 8) & 0xFFU),
		int((value >> 16) & 0xFFU),
		int((value >> 24) & 0xFFU));
}

} // namespace Serialize