Home | History | Annotate | Download | only in aapt
      1 //
      2 // Copyright 2011 The Android Open Source Project
      3 //
      4 // Cache manager for pre-processed PNG files.
      5 // Contains code for managing which PNG files get processed
      6 // at build time.
      7 //
      8 
      9 #ifndef CRUNCHCACHE_H
     10 #define CRUNCHCACHE_H
     11 
     12 #include <utils/KeyedVector.h>
     13 #include <utils/String8.h>
     14 #include "FileFinder.h"
     15 #include "CacheUpdater.h"
     16 
     17 using namespace android;
     18 
     19 /** CrunchCache
     20  *  This class is a cache manager which can pre-process PNG files and store
     21  *  them in a mirror-cache. It's capable of doing incremental updates to its
     22  *  cache.
     23  *
     24  *  Usage:
     25  *      Create an instance initialized with the root of the source tree, the
     26  *      root location to store the cache files, and an instance of a file finder.
     27  *      Then update the cache by calling crunch.
     28  */
     29 class CrunchCache {
     30 public:
     31     // Constructor
     32     CrunchCache(String8 sourcePath, String8 destPath, FileFinder* ff);
     33 
     34     // Nobody should be calling the default constructor
     35     // So this space is intentionally left blank
     36 
     37     // Default Copy Constructor and Destructor are fine
     38 
     39     /** crunch is the workhorse of this class.
     40      * It goes through all the files found in the sourcePath and compares
     41      * them to the cached versions in the destPath. If the optional
     42      * argument forceOverwrite is set to true, then all source files are
     43      * re-crunched even if they have not been modified recently. Otherwise,
     44      * source files are only crunched when they needUpdating. Afterwards,
     45      * we delete any leftover files in the cache that are no longer present
     46      * in source.
     47      *
     48      * PRECONDITIONS:
     49      *      No setup besides construction is needed
     50      * POSTCONDITIONS:
     51      *      The cache is updated to fully reflect all changes in source.
     52      *      The function then returns the number of files changed in cache
     53      *      (counting deletions).
     54      */
     55     size_t crunch(CacheUpdater* cu, bool forceOverwrite=false);
     56 
     57 private:
     58     /** loadFiles is a wrapper to the FileFinder that places matching
     59      * files into mSourceFiles and mDestFiles.
     60      *
     61      *  POSTCONDITIONS
     62      *      mDestFiles and mSourceFiles are refreshed to reflect the current
     63      *      state of the files in the source and dest directories.
     64      *      Any previous contents of mSourceFiles and mDestFiles are cleared.
     65      */
     66     void loadFiles();
     67 
     68     /** needsUpdating takes a file path
     69      * and returns true if the file represented by this path is newer in the
     70      * sourceFiles than in the cache (mDestFiles).
     71      *
     72      * PRECONDITIONS:
     73      *      mSourceFiles and mDestFiles must be initialized and filled.
     74      * POSTCONDITIONS:
     75      *      returns true if and only if source file's modification time
     76      *      is greater than the cached file's mod-time. Otherwise returns false.
     77      *
     78      * USAGE:
     79      *      Should be used something like the following:
     80      *      if (needsUpdating(filePath))
     81      *          // Recrunch sourceFile out to destFile.
     82      *
     83      */
     84     bool needsUpdating(String8 relativePath) const;
     85 
     86     // DATA MEMBERS ====================================================
     87 
     88     String8 mSourcePath;
     89     String8 mDestPath;
     90 
     91     Vector<String8> mExtensions;
     92 
     93     // Each vector of paths contains one entry per PNG file encountered.
     94     // Each entry consists of a path pointing to that PNG.
     95     DefaultKeyedVector<String8,time_t> mSourceFiles;
     96     DefaultKeyedVector<String8,time_t> mDestFiles;
     97 
     98     // Pointer to a FileFinder to use
     99     FileFinder* mFileFinder;
    100 };
    101 
    102 #endif // CRUNCHCACHE_H
    103