WPILibC++  unspecified
SequenceNumber.h
1 /*----------------------------------------------------------------------------*/
2 /* Copyright (c) FIRST 2015-2018. All Rights Reserved. */
3 /* Open Source Software - may be modified and shared by FRC teams. The code */
4 /* must be accompanied by the FIRST BSD license file in the root directory of */
5 /* the project. */
6 /*----------------------------------------------------------------------------*/
7 
8 #ifndef NTCORE_SEQUENCENUMBER_H_
9 #define NTCORE_SEQUENCENUMBER_H_
10 
11 namespace nt {
12 
13 /* A sequence number per RFC 1982 */
15  public:
16  SequenceNumber() : m_value(0) {}
17  explicit SequenceNumber(unsigned int value) : m_value(value) {}
18  unsigned int value() const { return m_value; }
19 
20  SequenceNumber& operator++() {
21  ++m_value;
22  if (m_value > 0xffff) m_value = 0;
23  return *this;
24  }
25  SequenceNumber operator++(int) {
26  SequenceNumber tmp(*this);
27  operator++();
28  return tmp;
29  }
30 
31  friend bool operator<(const SequenceNumber& lhs, const SequenceNumber& rhs);
32  friend bool operator>(const SequenceNumber& lhs, const SequenceNumber& rhs);
33  friend bool operator<=(const SequenceNumber& lhs, const SequenceNumber& rhs);
34  friend bool operator>=(const SequenceNumber& lhs, const SequenceNumber& rhs);
35  friend bool operator==(const SequenceNumber& lhs, const SequenceNumber& rhs);
36  friend bool operator!=(const SequenceNumber& lhs, const SequenceNumber& rhs);
37 
38  private:
39  unsigned int m_value;
40 };
41 
42 bool operator<(const SequenceNumber& lhs, const SequenceNumber& rhs);
43 bool operator>(const SequenceNumber& lhs, const SequenceNumber& rhs);
44 
45 inline bool operator<=(const SequenceNumber& lhs, const SequenceNumber& rhs) {
46  return lhs == rhs || lhs < rhs;
47 }
48 
49 inline bool operator>=(const SequenceNumber& lhs, const SequenceNumber& rhs) {
50  return lhs == rhs || lhs > rhs;
51 }
52 
53 inline bool operator==(const SequenceNumber& lhs, const SequenceNumber& rhs) {
54  return lhs.m_value == rhs.m_value;
55 }
56 
57 inline bool operator!=(const SequenceNumber& lhs, const SequenceNumber& rhs) {
58  return lhs.m_value != rhs.m_value;
59 }
60 
61 } // namespace nt
62 
63 #endif // NTCORE_SEQUENCENUMBER_H_
Definition: SequenceNumber.h:14
Definition: IEntryNotifier.h:16