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
00027 namespace qpid {
00028 namespace framing {
00029 class Buffer;
00030
00031 class SequenceSet : public RangeSet<SequenceNumber> {
00032 public:
00033 SequenceSet() {}
00034 explicit SequenceSet(const RangeSet<SequenceNumber>& r)
00035 : RangeSet<SequenceNumber>(r) {}
00036 explicit SequenceSet(const SequenceNumber& s) { add(s); }
00037 SequenceSet(const SequenceNumber& start, const SequenceNumber finish) { add(start,finish); }
00038
00039
00040 void encode(Buffer& buffer) const;
00041 void decode(Buffer& buffer);
00042 uint32_t size() const;
00043
00044 bool contains(const SequenceNumber& s) const;
00045 void add(const SequenceNumber& s);
00046 void add(const SequenceNumber& start, const SequenceNumber& finish);
00047 void add(const SequenceSet& set);
00048 void remove(const SequenceNumber& s);
00049 void remove(const SequenceNumber& start, const SequenceNumber& finish);
00050 void remove(const SequenceSet& set);
00051
00052 template <class T> void for_each(T& t) const {
00053 for (RangeIterator i = rangesBegin(); i != rangesEnd(); i++)
00054 t(i->first(), i->last());
00055 }
00056
00057 template <class T> void for_each(const T& t) const {
00058 for (RangeIterator i = rangesBegin(); i != rangesEnd(); i++)
00059 t(i->first(), i->last());
00060 }
00061
00062 friend std::ostream& operator<<(std::ostream&, const SequenceSet&);
00063 };
00064
00065 }}
00066
00067
00068 #endif