xref: /haiku/headers/private/kernel/boot/net/ChainBuffer.h (revision e81a954787e50e56a7f06f72705b7859b6ab06d1)
1 /*
2  * Copyright 2005, Ingo Weinhold <bonefish@cs.tu-berlin.de>.
3  * All rights reserved. Distributed under the terms of the MIT License.
4  */
5 
6 #ifndef _BOOT_NET_CHAIN_BUFFER_H
7 #define _BOOT_NET_CHAIN_BUFFER_H
8 
9 #include <SupportDefs.h>
10 
11 class ChainBuffer {
12 public:
13 
14 	ChainBuffer(void *data = 0, uint32 size = 0, ChainBuffer *next = NULL,
15 		bool freeData = false);
16 	~ChainBuffer();
17 
18 	void *Data() const			{ return fData; }
19 	uint32 Size() const			{ return fSize; }
20 	uint32 TotalSize() const	{ return fTotalSize; }
21 
22 	ChainBuffer *Next() const	{ return fNext; }
23 	ChainBuffer *DetachNext();
24 
25 	void Append(ChainBuffer *next);
26 
27 	void Flatten(void *_buffer) const;
28 
29 private:
30 // TODO: Implement Create() and Delete(). Make new and delete operators private.
31 	enum {
32 		CHAIN_BUFFER_HEAD			= 0x1,
33 		CHAIN_BUFFER_EMBEDDED_DATA	= 0x2,
34 		CHAIN_BUFFER_FREE_DATA		= 0x4,
35 		CHAIN_BUFFER_ON_STACK		= 0x8,
36 	};
37 
38 	void _Init(void *data, uint32 size, ChainBuffer *next, uint32 flags);
39 	void _Destroy();
40 
41 	uint32		fFlags:4;
42 	uint32		fSize:14;
43 	uint32		fTotalSize:14;
44 	void		*fData;
45 	ChainBuffer	*fNext;
46 	uint8		fBuffer[0];
47 };
48 
49 #endif	// _BOOT_NET_CHAIN_BUFFER_H
50