summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/framing/SequenceSet.h
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2008-04-16 15:33:51 +0000
committerAlan Conway <aconway@apache.org>2008-04-16 15:33:51 +0000
commit775aa6924e2c432791fafd354751bb068129fe2e (patch)
tree920584acaa99df0a6f8d55e53eefc9b38767e519 /cpp/src/qpid/framing/SequenceSet.h
parent79749f81fab85090506e236f8b625801291659a1 (diff)
downloadqpid-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.h22
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&);
};