00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _framing_SequenceNumber_h
00022 #define _framing_SequenceNumber_h
00023
00024 #include "amqp_types.h"
00025 #include <iosfwd>
00026
00027 namespace qpid {
00028 namespace framing {
00029
00030 class Buffer;
00031
00035 class SequenceNumber
00036 {
00037 int32_t value;
00038
00039 public:
00040 SequenceNumber();
00041 SequenceNumber(uint32_t v);
00042
00043 SequenceNumber& operator++();
00044 const SequenceNumber operator++(int);
00045 SequenceNumber& operator--();
00046 bool operator==(const SequenceNumber& other) const;
00047 bool operator!=(const SequenceNumber& other) const;
00048 bool operator<(const SequenceNumber& other) const;
00049 bool operator>(const SequenceNumber& other) const;
00050 bool operator<=(const SequenceNumber& other) const;
00051 bool operator>=(const SequenceNumber& other) const;
00052 uint32_t getValue() const { return (uint32_t) value; }
00053 operator uint32_t() const { return (uint32_t) value; }
00054
00055 friend int32_t operator-(const SequenceNumber& a, const SequenceNumber& b);
00056
00057 void encode(Buffer& buffer) const;
00058 void decode(Buffer& buffer);
00059 uint32_t encodedSize() const;
00060
00061 template <class S> void serialize(S& s) { s(value); }
00062 };
00063
00064 struct Window
00065 {
00066 SequenceNumber hwm;
00067 SequenceNumber lwm;
00068 };
00069
00070 std::ostream& operator<<(std::ostream& o, const SequenceNumber& n);
00071
00072 }}
00073
00074
00075 #endif