/// Writes all available data from \p is. void ostream::read (istream& is) { write (is.ipos(), is.remaining()); is.seek (is.size()); }
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; }
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); } }