xref: /haiku/headers/os/support/BlockCache.h (revision e75560e6cbd988dc5a4389b35e99268ed8ac03fe)
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