package freenet.node.probe; class Counter { /** * Maximum number of accepted probes in the past minute. */ public final int maxAccepted; private int c = 0; public Counter(int maxAccepted) { this.maxAccepted = maxAccepted; } public void increment() { c++; if (c > maxAccepted) { /* * The counter should never be incremented above the maximum, as an increment should * only happen after it has been confirmed to be below the limit. If this happens, it * indicates a concurrency problem or logic error. */ throw new IllegalStateException("Number of accepted probes exceeds the maximum: " + c); } } public void decrement() { c--; if (c < 0) { /* * The counter should never be decremented lower than zero, as a decrement should always * be paired with an increment before it, and if a counter reaches zero it should be * removed to avoid memory leaks. If this happens, it indicates a concurrency problem or * logic error. */ throw new IllegalStateException("Number of accepted probes is negative: " + c); } } public int value() { return c; } }