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_POOL_H_
7#define _PACKAGE__HPKG__PRIVATE__BLOCK_BUFFER_POOL_H_
8
9
10#include <SupportDefs.h>
11
12#include <util/DoublyLinkedList.h>
13
14#include <package/hpkg/BufferPool.h>
15
16
17namespace BPackageKit {
18
19namespace BHPKG {
20
21namespace BPrivate {
22
23
24class PoolBuffer;
25
26
27class BlockBufferPoolImpl : public BBufferPool {
28public:
29								BlockBufferPoolImpl(size_t blockSize,
30									uint32 maxCachedBlocks,
31									BBufferPoolLockable* lockable);
32								~BlockBufferPoolImpl();
33
34			status_t			Init();
35
36			PoolBuffer*			GetBuffer(size_t size,
37									PoolBuffer** owner = NULL,
38									bool* _newBuffer = NULL);
39			void				PutBufferAndCache(PoolBuffer** owner);
40			void				PutBuffer(PoolBuffer** owner);
41
42private:
43			typedef DoublyLinkedList<PoolBuffer> BufferList;
44
45private:
46			PoolBuffer*			_AllocateBuffer(size_t size,
47									PoolBuffer** 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			BBufferPoolLockable*	fLockable;
57};
58
59
60}	// namespace BPrivate
61
62}	// namespace BHPKG
63
64}	// namespace BPackageKit
65
66
67#endif	// _PACKAGE__HPKG__PRIVATE__BLOCK_BUFFER_POOL_H_
68