diff options
| author | Alan Conway <aconway@apache.org> | 2008-04-16 15:33:51 +0000 |
|---|---|---|
| committer | Alan Conway <aconway@apache.org> | 2008-04-16 15:33:51 +0000 |
| commit | 775aa6924e2c432791fafd354751bb068129fe2e (patch) | |
| tree | 920584acaa99df0a6f8d55e53eefc9b38767e519 /cpp/src/qpid/framing/SequenceSet.h | |
| parent | 79749f81fab85090506e236f8b625801291659a1 (diff) | |
| download | qpid-python-775aa6924e2c432791fafd354751bb068129fe2e.tar.gz | |
Fix encoding for sized structs.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@648724 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/framing/SequenceSet.h')
| -rw-r--r-- | cpp/src/qpid/framing/SequenceSet.h | 22 |
1 files changed, 13 insertions, 9 deletions
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 <ostream> -#include <list> #include "amqp_types.h" #include "Buffer.h" #include "SequenceNumber.h" #include "qpid/framing/reply_exceptions.h" +#include <ostream> +#include <list> 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 <class S> void serialize(S& s) { s(start)(end); } }; typedef std::list<Range> 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 <class S> void serialize(S& s) { s.split(*this); s(ranges.begin(), ranges.end()); } + template <class S> void encode(S& s) const { s(uint16_t(ranges.size()*sizeof(Range))); } + template <class S> void decode(S& s) { uint16_t sz; s(sz); ranges.resize(sz/sizeof(Range)); } + + friend std::ostream& operator<<(std::ostream&, const SequenceSet&); }; |
