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;
39 MaskCounter operator++(
int) {
40 MaskCounter tmp(*
this);
44 MaskCounter &operator--() {
45 val = (val - 1) & mask;
46 if (val == mask) oflo =
true;
49 MaskCounter operator--(
int) {
50 MaskCounter tmp(*
this);
54 MaskCounter &clear() {
59 MaskCounter &overflow(
bool v =
true) {