00001 #ifndef QPID_AMQP_0_10_STRUCT32_H
00002 #define QPID_AMQP_0_10_STRUCT32_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "qpid/amqp_0_10/StructHolder.h"
00026
00027 namespace qpid {
00028 namespace amqp_0_10 {
00029
00030 class Struct32 : public StructHolder
00031 {
00032 public:
00033 Struct32();
00034
00035 template <class T> explicit Struct32(const T& t) : StructHolder(t) {}
00036
00037 template <class S> void serialize(S& s) { s.split(*this); }
00038
00039 using StructHolder::operator=;
00040
00041 template <class S> void encode(S& s) const {
00042 s(contentSize());
00043 const_cast<Struct32*>(this)->StructHolder::serialize(s);
00044 }
00045
00046 template <class S> void decode(S& s) {
00047 uint32_t contentSz;
00048 s(contentSz);
00049 typename S::ScopedLimit l(s, contentSz);
00050 StructHolder::serialize(s);
00051 }
00052
00053 private:
00054 uint32_t contentSize() const {
00055 return Codec::size(static_cast<const StructHolder&>(*this));
00056 }
00057
00058 };
00059
00060 std::ostream& operator<<(std::ostream&, const Struct32&);
00061
00062 }}
00063
00064 #endif