1// RequestUnflattener.h 2 3#ifndef NET_FS_REQUEST_UNFLATTENER_H 4#define NET_FS_REQUEST_UNFLATTENER_H 5 6#include <SupportDefs.h> 7 8#include "Request.h" 9#include "HashString.h" 10 11// Reader 12class Reader { 13public: 14 Reader(); 15 virtual ~Reader(); 16 17 virtual status_t Read(void* buffer, int32 size) = 0; 18 virtual status_t Read(int32 size, void** buffer, 19 bool* mustFree); 20 virtual status_t Skip(int32 size); 21}; 22 23// RequestUnflattener 24class RequestUnflattener : public RequestMemberVisitor { 25public: 26 RequestUnflattener(Reader* reader); 27 28 status_t GetStatus() const; 29 int32 GetBytesRead() const; 30 31 virtual void Visit(RequestMember* member, bool& data); 32 virtual void Visit(RequestMember* member, int8& data); 33 virtual void Visit(RequestMember* member, uint8& data); 34 virtual void Visit(RequestMember* member, int16& data); 35 virtual void Visit(RequestMember* member, uint16& data); 36 virtual void Visit(RequestMember* member, int32& data); 37 virtual void Visit(RequestMember* member, uint32& data); 38 virtual void Visit(RequestMember* member, int64& data); 39 virtual void Visit(RequestMember* member, uint64& data); 40 virtual void Visit(RequestMember* member, Data& data); 41 virtual void Visit(RequestMember* member, StringData& data); 42 virtual void Visit(RequestMember* member, 43 RequestMember& subMember); 44 virtual void Visit(RequestMember* member, 45 FlattenableRequestMember& subMember); 46 47 status_t Read(void* buffer, int32 size); 48 status_t Read(int32 size, void*& buffer, bool& mustFree); 49 status_t Align(int32 align); 50 51 status_t ReadBool(bool& data); 52 status_t ReadInt32(int32& data); 53 status_t ReadData(void*& buffer, int32& size, 54 bool& mustFree); 55 status_t ReadString(HashString& string); 56 57private: 58 Reader* fReader; 59 status_t fStatus; 60 int32 fBytesRead; 61}; 62 63#endif // NET_FS_REQUEST_UNFLATTENER_H 64