From 775aa6924e2c432791fafd354751bb068129fe2e Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Wed, 16 Apr 2008 15:33:51 +0000 Subject: Fix encoding for sized structs. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@648724 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/framing/SequenceSet.h | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'cpp/src/qpid/framing/SequenceSet.h') diff --git a/cpp/src/qpid/framing/SequenceSet.h b/cpp/src/qpid/framing/SequenceSet.h index 2f34cb5cba..226062f35d 100644 --- a/cpp/src/qpid/framing/SequenceSet.h +++ b/cpp/src/qpid/framing/SequenceSet.h @@ -21,35 +21,35 @@ #ifndef _framing_SequenceSet_h #define _framing_SequenceSet_h -#include -#include #include "amqp_types.h" #include "Buffer.h" #include "SequenceNumber.h" #include "qpid/framing/reply_exceptions.h" +#include +#include namespace qpid { namespace framing { -class SequenceSet -{ - struct Range - { +class SequenceSet { + struct Range { SequenceNumber start; SequenceNumber end; - Range(SequenceNumber s, SequenceNumber e); + Range(SequenceNumber s=0, SequenceNumber e=0); bool contains(SequenceNumber i) const; bool intersects(const Range& r) const; bool merge(const Range& r); bool mergeable(const SequenceNumber& r) const; void encode(Buffer& buffer) const; + + template void serialize(S& s) { s(start)(end); } }; typedef std::list Ranges; Ranges ranges; -public: + public: SequenceSet() {} SequenceSet(const SequenceNumber& s) { add(s); } @@ -76,7 +76,11 @@ public: } } - friend std::ostream& operator<<(std::ostream&, const SequenceSet&); + template void serialize(S& s) { s.split(*this); s(ranges.begin(), ranges.end()); } + template void encode(S& s) const { s(uint16_t(ranges.size()*sizeof(Range))); } + template void decode(S& s) { uint16_t sz; s(sz); ranges.resize(sz/sizeof(Range)); } + + friend std::ostream& operator<<(std::ostream&, const SequenceSet&); }; -- cgit v1.2.1