74 if (_next ==
this)
return 0;
82 template<
class T, PtexLruItem T::*item>
92 _end.
push(&(node->*item));
100 static const T* dummy = 0;
101 static const std::ptrdiff_t itemOffset = (
const char*)&(dummy->*item) - (
const char*)dummy;
102 return it ? (T*) ((
char*)it - itemOffset) : 0;
131 :
PtexReader(premultiply, inputHandler, errorHandler), _cache(cache), _refCount(1),
132 _memUsedAccountedFor(0), _opensAccountedFor(0), _blockReadsAccountedFor(0)
140 int32_t oldCount = _refCount;
155 memUsedChange = getMemUsedChange();
165 memUsedChange = getMemUsedChange();
175 size_t result = memUsedTmp - _memUsedAccountedFor;
176 _memUsedAccountedFor = memUsedTmp;
181 size_t opensTmp = _opens;
182 size_t result = opensTmp - _opensAccountedFor;
183 _opensAccountedFor = opensTmp;
189 size_t result = blockReadsTmp - _blockReadsAccountedFor;
190 _blockReadsAccountedFor = blockReadsTmp;
201 : _maxFiles(maxFiles), _maxMem(maxMem), _io(inputHandler), _err(errorHandler), _premultiply(premultiply),
202 _memUsed(sizeof(*this)), _filesOpen(0), _mruList(&_mruLists[0]), _prevMruList(&_mruLists[1]),
203 _peakMemUsed(0), _peakFilesOpen(0), _fileOpens(0), _blockReads(0)
205 memset((
void*)&_mruLists[0], 0,
sizeof(_mruLists));
219 _searchpath = path ? path :
"";
225 const char* cp = path;
227 const char* delim = strchr(cp,
':');
229 if (*cp) _searchdirs.push_back(cp);
232 int len = int(delim-cp);
233 if (len) _searchdirs.push_back(std::string(cp, len));
241 return _searchpath.c_str();
247 virtual void purge(
const char* );
248 virtual void purgeAll();
249 virtual void getStats(
Stats& stats);
255 size_t memUsed =
AtomicAdd(&_memUsed, amount);
256 _peakMemUsed =
std::max(_peakMemUsed, memUsed);
261 size_t filesOpen =
AtomicAdd(&_filesOpen, amount);
262 _peakFilesOpen =
std::max(_peakFilesOpen, filesOpen);
274 bool findFile(
const char*& filename, std::string& buffer,
Ptex::String& error);
291 static const int numMruFiles = 50;
void adjustMemUsed(size_t amount)
PtexReaderCache(int maxFiles, size_t maxMem, bool premultiply, PtexInputHandler *inputHandler, PtexErrorHandler *errorHandler)
virtual void release()
Release PtexCache. Cache will be immediately destroyed and all resources will be released.
PtexHashMap< StringKey, PtexCachedReader * > FileMap
File-handle and memory cache for reading ptex files.
void push(PtexLruItem *item)
PtexCachedReader(bool premultiply, PtexInputHandler *inputHandler, PtexErrorHandler *errorHandler, PtexReaderCache *cache)
virtual void setSearchPath(const char *path)
Set a search path for finding textures.
size_t _blockReadsAccountedFor
PtexLruItem _openFilesItem
virtual const char * getSearchPath()
Query the search path.
bool tryPurge(size_t &memUsedChange)
Custom handler interface redirecting Ptex error messages.
std::vector< std::string > _searchdirs
PtexLruItem _activeFilesItem
size_t _memUsedAccountedFor
Cache for reading Ptex texture files.
MruList *volatile _mruList
PtexLruList< PtexCachedReader, &PtexCachedReader::_openFilesItem > _openFiles
PtexLruList< PtexCachedReader, &PtexCachedReader::_activeFilesItem > _activeFiles
volatile size_t _filesOpen
Interface for reading data from a ptex file.
volatile int32_t _refCount
bool tryPrune(size_t &memUsedChange)
size_t getBlockReadsChange()
Contains PtexHashMap, a lightweight multi-threaded hash table.
void adjustFilesOpen(size_t amount)
size_t memUsedChangeTotal
virtual void purge(PtexTexture *)
Remove a texture file from the cache.
size_t _opensAccountedFor
size_t getMemUsedChange()
MruList *volatile _prevMruList
#define PTEX_NAMESPACE_END