Esempio n. 1
0
/// Writes all available data from \p is.
void ostream::read (istream& is)
{
    write (is.ipos(), is.remaining());
    is.seek (is.size());
}
Esempio n. 2
-1
bool
XMLReader::open(istream& stream) noexcept
{
	assert(0 == _document);
	assert(0 == _currentNode);

	std::size_t length = stream.size();
	if (length == 0)
		return false;

	std::string data;
	data.resize(length);

	if (!stream.read((char*)data.c_str(), length))
		return false;

	_document = std::make_unique<TiXmlDocument>();
	_document->Parse(data.c_str());

	if (!_document->Error())
	{
		_currentNode = _document->RootElement();
		if (_currentNode)
			return true;
	}

	return false;
}
Esempio n. 3
-1
bool
BMPHandler::doLoad(Image& image, istream& stream) noexcept
{
	auto size = (std::size_t)stream.size();

	BITMAPINFO info;
	if (!stream.read((char*)&info, sizeof(info)))
		return false;

	if (info.header.size != size ||
		info.info.size != sizeof(BITMAPINFOHEADER) ||
		info.header.reserved1 != 0 ||
		info.header.reserved2 != 0 ||
		info.info.width == 0 ||
		info.info.height == 0 ||
		info.info.planes != 1 ||
		info.info.bpp != 1 && info.info.bpp != 4 &&
		info.info.bpp != 8 && info.info.bpp != 16 &&
		info.info.bpp != 24 && info.info.bpp != 32)
	{
		return false;
	}

	if (info.info.comp == BI_RGB)
	{
		return this->loadDIB(image, stream, info);
	}
	else
	{
		if (info.info.comp == BI_RLE4 && info.info.bpp != 4 ||
			info.info.comp == BI_RLE8 && info.info.bpp != 8 ||
			info.info.comp == BI_BITFIELDS && info.info.bpp != 16 && info.info.bpp != 32)
		{
			this->error(image_error::ENCODING_DOESNT_MATCH_BITDEPTH);
			return false;
		}

		return this->decode(image, stream, info);
	}
}