1/* 2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Copyright 2011, Oliver Tappe <zooey@hirschkaefer.de> 4 * Distributed under the terms of the MIT License. 5 */ 6#ifndef _PACKAGE__HPKG__PRIVATE__BLOCK_BUFFER_CACHE_H_ 7#define _PACKAGE__HPKG__PRIVATE__BLOCK_BUFFER_CACHE_H_ 8 9 10#include <SupportDefs.h> 11 12#include <util/DoublyLinkedList.h> 13 14#include <package/hpkg/BufferCache.h> 15 16 17namespace BPackageKit { 18 19namespace BHPKG { 20 21namespace BPrivate { 22 23 24class CachedBuffer; 25 26 27class BlockBufferCacheImpl : public BBufferCache { 28public: 29 BlockBufferCacheImpl(size_t blockSize, 30 uint32 maxCachedBlocks, 31 BBufferCacheLockable* lockable); 32 ~BlockBufferCacheImpl(); 33 34 status_t Init(); 35 36 CachedBuffer* GetBuffer(size_t size, 37 CachedBuffer** owner = NULL, 38 bool* _newBuffer = NULL); 39 void PutBufferAndCache(CachedBuffer** owner); 40 void PutBuffer(CachedBuffer** owner); 41 42private: 43 typedef DoublyLinkedList<CachedBuffer> BufferList; 44 45private: 46 CachedBuffer* _AllocateBuffer(size_t size, 47 CachedBuffer** owner, bool* _newBuffer); 48 // object must not be locked 49 50private: 51 size_t fBlockSize; 52 uint32 fMaxCachedBlocks; 53 uint32 fAllocatedBlocks; 54 BufferList fUnusedBuffers; 55 BufferList fCachedBuffers; 56 BBufferCacheLockable* fLockable; 57}; 58 59 60} // namespace BPrivate 61 62} // namespace BHPKG 63 64} // namespace BPackageKit 65 66 67#endif // _PACKAGE__HPKG__PRIVATE__BLOCK_BUFFER_CACHE_H_ 68