1/*
2 * Copyright 2008, Axel Dörfler, axeld@pinc-software.de.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef ADAPTIVE_BUFFERING_H
6#define ADAPTIVE_BUFFERING_H
7
8
9#include <OS.h>
10
11
12class AdaptiveBuffering {
13public:
14							AdaptiveBuffering(size_t initialBufferSize,
15								size_t maxBufferSize, uint32 count);
16	virtual					~AdaptiveBuffering();
17
18	virtual status_t		Init();
19
20	virtual status_t		Read(uint8* buffer, size_t* _length);
21	virtual status_t		Write(uint8* buffer, size_t length);
22
23			status_t		Run();
24
25private:
26			void			_QuitWriter();
27			status_t		_Writer();
28	static	status_t		_Writer(void* self);
29
30			thread_id		fWriterThread;
31			uint8**			fBuffers;
32			size_t*			fReadBytes;
33			uint32			fBufferCount;
34			uint32			fReadIndex;
35			uint32			fWriteIndex;
36			uint32			fReadCount;
37			uint32			fWriteCount;
38			size_t			fMaxBufferSize;
39			size_t			fCurrentBufferSize;
40			sem_id			fReadSem;
41			sem_id			fWriteSem;
42			sem_id			fFinishedSem;
43			status_t		fWriteStatus;
44			uint32			fWriteTime;
45			bool			fFinished;
46			bool			fQuit;
47};
48
49#endif	// ADAPTIVE_BUFFERING_H
50