| // |
| // Copyright 2011 The Android Open Source Project |
| // |
| // Cache manager for pre-processed PNG files. |
| // Contains code for managing which PNG files get processed |
| // at build time. |
| // |
| |
| #ifndef CRUNCHCACHE_H |
| #define CRUNCHCACHE_H |
| |
| #include <utils/KeyedVector.h> |
| #include <utils/String8.h> |
| #include "FileFinder.h" |
| #include "CacheUpdater.h" |
| |
| using namespace android; |
| |
| /** CrunchCache |
| * This class is a cache manager which can pre-process PNG files and store |
| * them in a mirror-cache. It's capable of doing incremental updates to its |
| * cache. |
| * |
| * Usage: |
| * Create an instance initialized with the root of the source tree, the |
| * root location to store the cache files, and an instance of a file finder. |
| * Then update the cache by calling crunch. |
| */ |
| class CrunchCache { |
| public: |
| // Constructor |
| CrunchCache(String8 sourcePath, String8 destPath, FileFinder* ff); |
| |
| // Nobody should be calling the default constructor |
| // So this space is intentionally left blank |
| |
| // Default Copy Constructor and Destructor are fine |
| |
| /** crunch is the workhorse of this class. |
| * It goes through all the files found in the sourcePath and compares |
| * them to the cached versions in the destPath. If the optional |
| * argument forceOverwrite is set to true, then all source files are |
| * re-crunched even if they have not been modified recently. Otherwise, |
| * source files are only crunched when they needUpdating. Afterwards, |
| * we delete any leftover files in the cache that are no longer present |
| * in source. |
| * |
| * PRECONDITIONS: |
| * No setup besides construction is needed |
| * POSTCONDITIONS: |
| * The cache is updated to fully reflect all changes in source. |
| * The function then returns the number of files changed in cache |
| * (counting deletions). |
| */ |
| size_t crunch(CacheUpdater* cu, bool forceOverwrite=false); |
| |
| private: |
| /** loadFiles is a wrapper to the FileFinder that places matching |
| * files into mSourceFiles and mDestFiles. |
| * |
| * POSTCONDITIONS |
| * mDestFiles and mSourceFiles are refreshed to reflect the current |
| * state of the files in the source and dest directories. |
| * Any previous contents of mSourceFiles and mDestFiles are cleared. |
| */ |
| void loadFiles(); |
| |
| /** needsUpdating takes a file path |
| * and returns true if the file represented by this path is newer in the |
| * sourceFiles than in the cache (mDestFiles). |
| * |
| * PRECONDITIONS: |
| * mSourceFiles and mDestFiles must be initialized and filled. |
| * POSTCONDITIONS: |
| * returns true if and only if source file's modification time |
| * is greater than the cached file's mod-time. Otherwise returns false. |
| * |
| * USAGE: |
| * Should be used something like the following: |
| * if (needsUpdating(filePath)) |
| * // Recrunch sourceFile out to destFile. |
| * |
| */ |
| bool needsUpdating(const String8& relativePath) const; |
| |
| // DATA MEMBERS ==================================================== |
| |
| String8 mSourcePath; |
| String8 mDestPath; |
| |
| Vector<String8> mExtensions; |
| |
| // Each vector of paths contains one entry per PNG file encountered. |
| // Each entry consists of a path pointing to that PNG. |
| DefaultKeyedVector<String8,time_t> mSourceFiles; |
| DefaultKeyedVector<String8,time_t> mDestFiles; |
| |
| // Pointer to a FileFinder to use |
| FileFinder* mFileFinder; |
| }; |
| |
| #endif // CRUNCHCACHE_H |