00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _framing_SequenceSet_h
00022 #define _framing_SequenceSet_h
00023
00024 #include "SequenceNumber.h"
00025 #include "qpid/RangeSet.h"
00026 #include "qpid/CommonImportExport.h"
00027
00028 namespace qpid {
00029 namespace framing {
00030 class Buffer;
00031
00032 class SequenceSet : public RangeSet<SequenceNumber> {
00033 public:
00034 SequenceSet() {}
00035 SequenceSet(const RangeSet<SequenceNumber>& r)
00036 : RangeSet<SequenceNumber>(r) {}
00037 SequenceSet(const SequenceNumber& s) { add(s); }
00038 SequenceSet(const SequenceNumber& start, const SequenceNumber finish) { add(start,finish); }
00039
00040
00041 void encode(Buffer& buffer) const;
00042 void decode(Buffer& buffer);
00043 uint32_t encodedSize() const;
00044
00045 QPID_COMMON_EXTERN bool contains(const SequenceNumber& s) const;
00046 QPID_COMMON_EXTERN void add(const SequenceNumber& s);
00047 QPID_COMMON_EXTERN void add(const SequenceNumber& start, const SequenceNumber& finish);
00048 QPID_COMMON_EXTERN void add(const SequenceSet& set);
00049 QPID_COMMON_EXTERN void remove(const SequenceNumber& s);
00050 QPID_COMMON_EXTERN void remove(const SequenceNumber& start, const SequenceNumber& finish);
00051 QPID_COMMON_EXTERN void remove(const SequenceSet& set);
00052
00053 template <class T> void for_each(T& t) const {
00054 for (RangeIterator i = rangesBegin(); i != rangesEnd(); i++)
00055 t(i->first(), i->last());
00056 }
00057
00058 template <class T> void for_each(const T& t) const {
00059 for (RangeIterator i = rangesBegin(); i != rangesEnd(); i++)
00060 t(i->first(), i->last());
00061 }
00062
00063 friend QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream&, const SequenceSet&);
00064 };
00065
00066 }}
00067
00068
00069 #endif