P4C
The P4 Compiler
Loading...
Searching...
No Matches
mask_counter.h
1
17
18#ifndef BACKENDS_TOFINO_BF_ASM_MASK_COUNTER_H_
19#define BACKENDS_TOFINO_BF_ASM_MASK_COUNTER_H_
20
21#include <limits.h>
22
23#include "lib/bitvec.h"
24
25class MaskCounter {
26 unsigned mask, val;
27 bool oflo;
28
29 public:
30 explicit MaskCounter(unsigned m) : mask(m), val(0), oflo(false) {}
31 explicit operator bool() const { return !oflo; }
32 operator unsigned() const { return val; }
33 bool operator==(const MaskCounter &a) const { return val == a.val && oflo == a.oflo; }
34 MaskCounter &operator++() {
35 val = ((val | ~mask) + 1) & mask;
36 if (val == 0) oflo = true;
37 return *this;
38 }
39 MaskCounter operator++(int) {
40 MaskCounter tmp(*this);
41 ++*this;
42 return tmp;
43 }
44 MaskCounter &operator--() {
45 val = (val - 1) & mask;
46 if (val == mask) oflo = true;
47 return *this;
48 }
49 MaskCounter operator--(int) {
50 MaskCounter tmp(*this);
51 --*this;
52 return tmp;
53 }
54 MaskCounter &clear() {
55 val = 0;
56 oflo = false;
57 return *this;
58 }
59 MaskCounter &overflow(bool v = true) {
60 oflo = v;
61 return *this;
62 }
63};
64
65#endif /* BACKENDS_TOFINO_BF_ASM_MASK_COUNTER_H_ */