You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.4 KiB
103 lines
3.4 KiB
//
|
|
// 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
|