1/*
2 * Copyright 2009,2011, Haiku, Inc.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _PACKAGE__HPKG__BUFFER_CACHE_H_
6#define _PACKAGE__HPKG__BUFFER_CACHE_H_
7
8
9#include <stddef.h>
10
11
12namespace BPackageKit {
13
14namespace BHPKG {
15
16
17namespace BPrivate {
18	class CachedBuffer;
19}
20using BPrivate::CachedBuffer;
21
22
23class BBufferCache {
24public:
25	virtual						~BBufferCache();
26
27	virtual	CachedBuffer*		GetBuffer(size_t size,
28									CachedBuffer** owner = NULL,
29									bool* _newBuffer = NULL) = 0;
30	virtual	void				PutBufferAndCache(CachedBuffer** owner) = 0;
31									// caller is buffer owner and wants the
32									// buffer cached, if possible
33	virtual	void				PutBuffer(CachedBuffer** owner) = 0;
34									// puts the buffer for good, owner might
35									// have called PutBufferAndCache() before
36									// and might not own a buffer anymore
37};
38
39
40class BBufferCacheLockable {
41public:
42	virtual						~BBufferCacheLockable();
43
44	virtual	bool				Lock() = 0;
45	virtual	void				Unlock() = 0;
46};
47
48
49}	// namespace BHPKG
50
51}	// namespace BPackageKit
52
53
54#endif	// _PACKAGE__HPKG__BUFFER_CACHE_H_
55