void Resources::addToCache(const Common::String &filename) { _cache.load(filename); // Check to see if the file is a library Common::SeekableReadStream *stream = load(filename); uint32 header = stream->readUint32BE(); if (header == MKTAG('L', 'I', 'B', 26)) loadLibraryIndex(filename, stream, false); else if (header == MKTAG('L', 'I', 'C', 26)) loadLibraryIndex(filename, stream, true); delete stream; }
Common::SeekableReadStream *Resources::load(const Common::String &filename, const Common::String &libraryFile, bool suppressErrors) { // Open up the library for access Common::SeekableReadStream *libStream = load(libraryFile); // Check if the library has already had its index read, and if not, load it if (!_indexes.contains(libraryFile)) loadLibraryIndex(libraryFile, libStream, false); LibraryIndex &libIndex = _indexes[libraryFile]; // Handle if resource is not present if (!libIndex.contains(filename)) { if (!suppressErrors) error("Could not find resource - %s", filename.c_str()); delete libStream; return nullptr; } // Extract the data for the specified resource and return it LibraryEntry &entry = libIndex[filename]; libStream->seek(entry._offset); Common::SeekableReadStream *stream = libStream->readStream(entry._size); decompressIfNecessary(stream); delete libStream; return stream; }
void Resources::addToCache(const Common::String &filename) { // Return immediately if the library has already been loaded if (_indexes.contains(filename)) return; _cache.load(filename); // Check to see if the file is a library Common::SeekableReadStream *stream = load(filename); uint32 header = stream->readUint32BE(); if (header == MKTAG('L', 'I', 'B', 26)) loadLibraryIndex(filename, stream, false); else if (header == MKTAG('L', 'I', 'C', 26)) loadLibraryIndex(filename, stream, true); delete stream; }
Common::SeekableReadStream *Resources::load(const Common::String &filename, const Common::String &libraryFile) { // Open up the library for access Common::SeekableReadStream *libStream = load(libraryFile); // Check if the library has already had it's index read, and if not, load it if (!_indexes.contains(libraryFile)) loadLibraryIndex(libraryFile, libStream, false); // Extract the data for the specified resource and return it LibraryEntry &entry = _indexes[libraryFile][filename]; libStream->seek(entry._offset); Common::SeekableReadStream *stream = libStream->readStream(entry._size); decompressIfNecessary(stream); delete libStream; return stream; }