| // | 
 | // 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(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 |