1*e75560e6Sejakowatz //****************************************************************************** 2*e75560e6Sejakowatz // 3*e75560e6Sejakowatz // File: BlockCache.h 4*e75560e6Sejakowatz // 5*e75560e6Sejakowatz // Description: Manages a cache of same size blocks of memory 6*e75560e6Sejakowatz // 7*e75560e6Sejakowatz // Copyright (c) 2002 Massimiliano Origgi 8*e75560e6Sejakowatz // 9*e75560e6Sejakowatz // License: 10*e75560e6Sejakowatz // 11*e75560e6Sejakowatz //****************************************************************************** 12*e75560e6Sejakowatz 13*e75560e6Sejakowatz #ifndef _BLOCK_CACHE_H 14*e75560e6Sejakowatz #define _BLOCK_CACHE_H 15*e75560e6Sejakowatz 16*e75560e6Sejakowatz #include <BeBuild.h> 17*e75560e6Sejakowatz #include <Locker.h> 18*e75560e6Sejakowatz 19*e75560e6Sejakowatz // Allocation type 20*e75560e6Sejakowatz enum 21*e75560e6Sejakowatz { 22*e75560e6Sejakowatz B_OBJECT_CACHE = 0, 23*e75560e6Sejakowatz B_MALLOC_CACHE = 1 24*e75560e6Sejakowatz }; 25*e75560e6Sejakowatz 26*e75560e6Sejakowatz 27*e75560e6Sejakowatz class BBlockCache 28*e75560e6Sejakowatz { 29*e75560e6Sejakowatz public: 30*e75560e6Sejakowatz 31*e75560e6Sejakowatz BBlockCache(size_t CacheSize, size_t BlockSize, uint32 Type); 32*e75560e6Sejakowatz virtual ~BBlockCache(void); 33*e75560e6Sejakowatz 34*e75560e6Sejakowatz void *Get(size_t BlockSize); 35*e75560e6Sejakowatz void Save(void *Data, size_t BlockSize); 36*e75560e6Sejakowatz 37*e75560e6Sejakowatz private: 38*e75560e6Sejakowatz 39*e75560e6Sejakowatz virtual void _ReservedBlockCache1(); 40*e75560e6Sejakowatz virtual void _ReservedBlockCache2(); 41*e75560e6Sejakowatz 42*e75560e6Sejakowatz BBlockCache(const BBlockCache &); 43*e75560e6Sejakowatz BBlockCache &operator=(const BBlockCache &); 44*e75560e6Sejakowatz 45*e75560e6Sejakowatz size_t fCacheSize; 46*e75560e6Sejakowatz size_t fBlockSize; 47*e75560e6Sejakowatz void *fCache; 48*e75560e6Sejakowatz size_t fMark; 49*e75560e6Sejakowatz BLocker fLock; 50*e75560e6Sejakowatz void *(*fAlloc)(size_t Size); 51*e75560e6Sejakowatz void (*fFree)(void *Data); 52*e75560e6Sejakowatz 53*e75560e6Sejakowatz uint32 _reserved[2]; 54*e75560e6Sejakowatz }; 55*e75560e6Sejakowatz 56*e75560e6Sejakowatz #endif 57