LCOV - code coverage report
Current view: top level - source/ps - CacheLoader.h (source / functions) Hit Total Coverage
Test: 0 A.D. test coverage report Lines: 1 1 100.0 %
Date: 2023-01-19 00:18:29 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /* Copyright (C) 2018 Wildfire Games.
       2             :  * This file is part of 0 A.D.
       3             :  *
       4             :  * 0 A.D. is free software: you can redistribute it and/or modify
       5             :  * it under the terms of the GNU General Public License as published by
       6             :  * the Free Software Foundation, either version 2 of the License, or
       7             :  * (at your option) any later version.
       8             :  *
       9             :  * 0 A.D. is distributed in the hope that it will be useful,
      10             :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      11             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      12             :  * GNU General Public License for more details.
      13             :  *
      14             :  * You should have received a copy of the GNU General Public License
      15             :  * along with 0 A.D.  If not, see <http://www.gnu.org/licenses/>.
      16             :  */
      17             : 
      18             : #ifndef INCLUDED_CACHELOADER
      19             : #define INCLUDED_CACHELOADER
      20             : 
      21             : #include "lib/file/vfs/vfs.h"
      22             : 
      23             : class MD5;
      24             : 
      25             : /**
      26             :  * Helper class for systems that have an expensive cacheable conversion process
      27             :  * when loading files.
      28             :  *
      29             :  * Conversion output can be automatically cached as loose files, indexed by a hash
      30             :  * of the file's timestamp and size plus any other data the caller provides.
      31             :  * This allows developers and modders to easily produce new files, with the conversion
      32             :  * happening transparently.
      33             :  *
      34             :  * For release packages, files can be precached by appending ".cached.{extension}"
      35             :  * to their name, which will be used instead of doing runtime conversion.
      36             :  * These cache files will typically be packed into an archive for faster loading;
      37             :  * if no archive cache is available then the source file will be converted and stored
      38             :  * as a loose cache file instead.
      39             :  */
      40         451 : class CCacheLoader
      41             : {
      42             : public:
      43             :     CCacheLoader(PIVFS vfs, const std::wstring& fileExtension);
      44             : 
      45             :     /**
      46             :      * Attempts to find a valid cached which can be loaded.
      47             :      * Returns INFO::OK and sets loadPath to the cached file if there is one.
      48             :      * Returns INFO::SKIPPED and sets loadPath to the desire loose cache name if there isn't one.
      49             :      * Returns a value < 0 on error (e.g. the source file doesn't exist). No error is logged or thrown.
      50             :      */
      51             :     Status TryLoadingCached(const VfsPath& sourcePath, const MD5& initialHash, u32 version, VfsPath& loadPath);
      52             : 
      53             :     /**
      54             :      * Determines whether we can safely use the archived cache file, or need to
      55             :      * re-convert the source file.
      56             :      */
      57             :     bool CanUseArchiveCache(const VfsPath& sourcePath, const VfsPath& archiveCachePath);
      58             : 
      59             :     /**
      60             :      * Return the path of the archive cache for the given source file.
      61             :      */
      62             :     VfsPath ArchiveCachePath(const VfsPath& sourcePath) const;
      63             : 
      64             :     /**
      65             :      * Return the path of the loose cache for the given source file.
      66             :      */
      67             :     VfsPath LooseCachePath(const VfsPath& sourcePath, const MD5& initialHash, u32 version);
      68             : 
      69             : private:
      70             :     PIVFS m_VFS;
      71             :     std::wstring m_FileExtension;
      72             : };
      73             : 
      74             : #endif // INCLUDED_CACHELOADER

Generated by: LCOV version 1.13