#ifndef TCACHERESOURCEPOOL_INCLUDED
#define TCACHERESOURCEPOOL_INCLUDED
#include "tcommon.h"
#include "tfilepath.h"
#include "tcacheresource.h"
#include <QString>
#include <QSettings>
#include <QMutex>
#undef DVAPI
#undef DVVAR
#ifdef TFX_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif
//============================================================================
class THDCacheResourcePool;
class TCacheResource;
class TFilePath;
//============================================================================
class DVAPI TCacheResourcePool : public QObject
{
Q_OBJECT
THDCacheResourcePool *m_hdPool;
TFilePath m_path;
typedef std::map<std::string, TCacheResource *> MemResources;
MemResources m_memResources;
QMutex m_memMutex;
unsigned int m_searchCount;
bool m_foundIterator;
MemResources::iterator m_searchIterator;
TCacheResourcePool();
~TCacheResourcePool();
public:
//General functions
static TCacheResourcePool *instance();
void setPath(QString cacheRoot, QString projectName, QString sceneName);
const TFilePath &getPath() const;
void reset();
void beginCachedSearch();
void endCachedSearch();
public:
//Pool management functions
void flushResources();
unsigned int getCurrentSize() const;
unsigned int getSizeAccessedAfterDays(int days) const;
void clear();
void clear(QString cacheRoot, QString projectName, QString sceneName);
void clearKeyword(const std::string &keyword);
void addReference(TCacheResourceP resource, QString flag);
void releaseReference(TCacheResourceP resource, QString flag);
void releaseReferences(QString flag);
void clearFxResources(std::wstring fxId);
void clearAccessedUpToSize(int MB);
void clearAccessedAfterDays(int days);
void clearAccessedAfterSessions(int sessionsCount);
//Automatic management functions
void setMaximumSize(int MB);
int getMaximumSize() const;
void setResourcesAccessTimeOut(int days);
int getResourcesAccessTimeOut() const;
//void setAutomaticCleanupInterval(int days, int minutes);
private:
//Resources interaction functions
friend class TCacheResource;
friend class TCacheResourceP;
TCacheResource *getResource(const std::string &name, bool createIfNone);
void releaseResource(TCacheResource *resource);
void invalidateAll();
private:
//HD Pool functions
bool isHDActive();
void startBacking(TCacheResource *resource);
void saveResourceInfos(TCacheResource *resource);
void touchBackingPath(TCacheResource *resource);
QString getPoolRoot(QString cacheRoot, QString projectName, QString sceneName);
void clearResource(QString path);
};
#endif //TCACHERESOURCEPOOL_INCLUDED