#ifndef Counter_hh #define Counter_hh struct Counter { Counter(unsigned int max) : value_(0), max_(max) {} int Add(unsigned int arg) { if (arg > max_ - value_) { return 0; } value_ += arg; return 1; } int MultiplyAndAdd(unsigned int one, unsigned int two) { unsigned long long op1 = one; unsigned long long op2 = two; unsigned long long prod = op1 * op2; if (prod > max_ || !Add(prod)) { return 0; } return 1; } unsigned int value_; unsigned int max_; }; #endif