1// RequestFlattener.h
2
3#ifndef NET_FS_REQUEST_FLATTENER_H
4#define NET_FS_REQUEST_FLATTENER_H
5
6#include <DataIO.h>
7
8#include "Request.h"
9
10// Writer
11class Writer {
12public:
13								Writer();
14	virtual						~Writer();
15
16	virtual	status_t			Write(const void* buffer, int32 size) = 0;
17	virtual	status_t			Pad(int32 size);
18};
19
20// DataIOWriter
21class DataIOWriter : public Writer {
22public:
23								DataIOWriter(BDataIO* dataIO);
24	virtual						~DataIOWriter();
25
26	virtual	status_t			Write(const void* buffer, int32 size);
27
28private:
29			BDataIO*			fDataIO;
30};
31
32// DummyWriter
33class DummyWriter : public Writer {
34public:
35								DummyWriter();
36	virtual						~DummyWriter();
37
38	virtual	status_t			Write(const void* buffer, int32 size);
39};
40
41// RequestFlattener
42class RequestFlattener : public RequestMemberVisitor {
43public:
44								RequestFlattener(Writer* writer);
45
46			status_t			GetStatus() const;
47			int32				GetBytesWritten() const;
48
49	virtual	void				Visit(RequestMember* member, bool& data);
50	virtual	void				Visit(RequestMember* member, int8& data);
51	virtual	void				Visit(RequestMember* member, uint8& data);
52	virtual	void				Visit(RequestMember* member, int16& data);
53	virtual	void				Visit(RequestMember* member, uint16& data);
54	virtual	void				Visit(RequestMember* member, int32& data);
55	virtual	void				Visit(RequestMember* member, uint32& data);
56	virtual	void				Visit(RequestMember* member, int64& data);
57	virtual	void				Visit(RequestMember* member, uint64& data);
58	virtual	void				Visit(RequestMember* member, Data& data);
59	virtual	void				Visit(RequestMember* member, StringData& data);
60	virtual	void				Visit(RequestMember* member,
61									RequestMember& subMember);
62	virtual	void				Visit(RequestMember* member,
63									FlattenableRequestMember& subMember);
64
65			status_t			Write(const void* buffer, int32 size);
66			status_t			Align(int32 align);
67
68			status_t			WriteBool(bool data);
69			status_t			WriteInt32(int32 data);
70			status_t			WriteData(const void* buffer, int32 size);
71			status_t			WriteString(const char* string);
72
73private:
74			Writer*				fWriter;
75			status_t			fStatus;
76			int32				fBytesWritten;
77};
78
79
80#endif	// NET_FS_REQUEST_FLATTENER_H
81