// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

package com.android.tools.r8.utils;

public class IntBox {

  private int value;

  public IntBox() {}

  public IntBox(int initialValue) {
    set(initialValue);
  }

  public void decrement(int i) {
    assert i > 0;
    value -= i;
  }

  public int decrementAndGet(int i) {
    decrement(i);
    return get();
  }

  public int get() {
    return value;
  }

  public int getAndIncrement() {
    return getAndIncrement(1);
  }

  public int getAndIncrement(int i) {
    int previous = value;
    increment(i);
    return previous;
  }

  public int getAndSet(int value) {
    int previous = this.value;
    set(value);
    return previous;
  }

  public void increment() {
    increment(1);
  }

  public void increment(int i) {
    assert i >= 0;
    value += i;
  }

  public void set(int value) {
    this.value = value;
  }

  public void setMax(int value) {
    if (value > get()) {
      set(value);
    }
  }
}
