00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _StructHelper_
00022 #define _StructHelper_
00023
00024 #include "qpid/Exception.h"
00025 #include "qpid/CommonImportExport.h"
00026 #include "qpid/framing/Buffer.h"
00027
00028 #include <stdlib.h>
00029
00030 namespace qpid {
00031 namespace framing {
00032
00033 class StructHelper
00034 {
00035 public:
00036
00037 template <class T> void encode(const T t, std::string& data) {
00038 uint32_t size = t.bodySize() + 2;
00039 data.resize(size);
00040 Buffer wbuffer(const_cast<char*>(data.data()), size);
00041 wbuffer.putShort(T::TYPE);
00042 t.encodeStructBody(wbuffer);
00043 }
00044
00045 template <class T> void decode(T& t, const std::string& data) {
00046 Buffer rbuffer(const_cast<char*>(data.data()), data.length());
00047 uint16_t type = rbuffer.getShort();
00048 if (type == T::TYPE) {
00049 t.decodeStructBody(rbuffer);
00050 } else {
00051 throw Exception("Type code does not match");
00052 }
00053 }
00054 };
00055
00056 }}
00057 #endif