1 // RequestBufferReplacer.cpp
2
3 #include <new>
4
5 #include <stdlib.h>
6 #include <string.h>
7
8 #include "RequestBufferReplacer.h"
9
10 // constructor
RequestBufferReplacer()11 RequestBufferReplacer::RequestBufferReplacer()
12 : fBuffer(NULL),
13 fBufferSize(0)
14 {
15 }
16
17 // destructor
~RequestBufferReplacer()18 RequestBufferReplacer::~RequestBufferReplacer()
19 {
20 }
21
22 // ReplaceBuffer
23 status_t
ReplaceBuffer(Request * request)24 RequestBufferReplacer::ReplaceBuffer(Request* request)
25 {
26 if (!request)
27 return B_BAD_VALUE;
28
29 // get the size we need to allocate
30 fBuffer = NULL;
31 fBufferSize = 0;
32 request->ShowAround(this);
33 if (fBufferSize == 0)
34 return B_OK;
35
36 // allocate the buffer
37 RequestBuffer* requestBuffer = RequestBuffer::Create(fBufferSize);
38 if (!requestBuffer)
39 return B_NO_MEMORY;
40 fBuffer = (char*)requestBuffer->GetData();
41
42 // relocate the data
43 request->ShowAround(this);
44
45 // attach the new buffer
46 request->AttachBuffer(requestBuffer);
47
48 return B_OK;
49 }
50
51 // Visit
52 void
Visit(RequestMember * member,bool & data)53 RequestBufferReplacer::Visit(RequestMember* member, bool& data)
54 {
55 }
56
57 // Visit
58 void
Visit(RequestMember * member,int8 & data)59 RequestBufferReplacer::Visit(RequestMember* member, int8& data)
60 {
61 }
62
63 // Visit
64 void
Visit(RequestMember * member,uint8 & data)65 RequestBufferReplacer::Visit(RequestMember* member, uint8& data)
66 {
67 }
68
69 // Visit
70 void
Visit(RequestMember * member,int16 & data)71 RequestBufferReplacer::Visit(RequestMember* member, int16& data)
72 {
73 }
74
75 // Visit
76 void
Visit(RequestMember * member,uint16 & data)77 RequestBufferReplacer::Visit(RequestMember* member, uint16& data)
78 {
79 }
80
81 // Visit
82 void
Visit(RequestMember * member,int32 & data)83 RequestBufferReplacer::Visit(RequestMember* member, int32& data)
84 {
85 }
86
87 // Visit
88 void
Visit(RequestMember * member,uint32 & data)89 RequestBufferReplacer::Visit(RequestMember* member, uint32& data)
90 {
91 }
92
93 // Visit
94 void
Visit(RequestMember * member,int64 & data)95 RequestBufferReplacer::Visit(RequestMember* member, int64& data)
96 {
97 }
98
99 // Visit
100 void
Visit(RequestMember * member,uint64 & data)101 RequestBufferReplacer::Visit(RequestMember* member, uint64& data)
102 {
103 }
104
105 // Visit
106 void
Visit(RequestMember * member,Data & data)107 RequestBufferReplacer::Visit(RequestMember* member, Data& data)
108 {
109 int32 size = data.GetSize();
110 if (fBuffer) {
111 if (size > 0) {
112 memcpy(fBuffer, data.GetData(), size);
113 data.SetTo(fBuffer, size);
114 fBuffer += size;
115 }
116 } else
117 fBufferSize += size;
118 }
119
120 // Visit
121 void
Visit(RequestMember * member,StringData & data)122 RequestBufferReplacer::Visit(RequestMember* member, StringData& data)
123 {
124 Visit(member, static_cast<Data&>(data));
125 }
126
127 // Visit
128 void
Visit(RequestMember * member,RequestMember & subMember)129 RequestBufferReplacer::Visit(RequestMember* member, RequestMember& subMember)
130 {
131 subMember.ShowAround(this);
132 }
133
134 // Visit
135 void
Visit(RequestMember * member,FlattenableRequestMember & subMember)136 RequestBufferReplacer::Visit(RequestMember* member,
137 FlattenableRequestMember& subMember)
138 {
139 subMember.ShowAround(this);
140 }
141
142