1// RequestBufferReplacer.cpp 2 3#include <new> 4 5#include <stdlib.h> 6#include <string.h> 7 8#include "RequestBufferReplacer.h" 9 10// constructor 11RequestBufferReplacer::RequestBufferReplacer() 12 : fBuffer(NULL), 13 fBufferSize(0) 14{ 15} 16 17// destructor 18RequestBufferReplacer::~RequestBufferReplacer() 19{ 20} 21 22// ReplaceBuffer 23status_t 24RequestBufferReplacer::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 52void 53RequestBufferReplacer::Visit(RequestMember* member, bool& data) 54{ 55} 56 57// Visit 58void 59RequestBufferReplacer::Visit(RequestMember* member, int8& data) 60{ 61} 62 63// Visit 64void 65RequestBufferReplacer::Visit(RequestMember* member, uint8& data) 66{ 67} 68 69// Visit 70void 71RequestBufferReplacer::Visit(RequestMember* member, int16& data) 72{ 73} 74 75// Visit 76void 77RequestBufferReplacer::Visit(RequestMember* member, uint16& data) 78{ 79} 80 81// Visit 82void 83RequestBufferReplacer::Visit(RequestMember* member, int32& data) 84{ 85} 86 87// Visit 88void 89RequestBufferReplacer::Visit(RequestMember* member, uint32& data) 90{ 91} 92 93// Visit 94void 95RequestBufferReplacer::Visit(RequestMember* member, int64& data) 96{ 97} 98 99// Visit 100void 101RequestBufferReplacer::Visit(RequestMember* member, uint64& data) 102{ 103} 104 105// Visit 106void 107RequestBufferReplacer::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 121void 122RequestBufferReplacer::Visit(RequestMember* member, StringData& data) 123{ 124 Visit(member, static_cast<Data&>(data)); 125} 126 127// Visit 128void 129RequestBufferReplacer::Visit(RequestMember* member, RequestMember& subMember) 130{ 131 subMember.ShowAround(this); 132} 133 134// Visit 135void 136RequestBufferReplacer::Visit(RequestMember* member, 137 FlattenableRequestMember& subMember) 138{ 139 subMember.ShowAround(this); 140} 141 142