public void addDestructive(int r) {
    if ((this.v[0] & SqlMathUtil.LONG_MASK) + (r & SqlMathUtil.LONG_MASK) >= (1L << 32L)) {
      this.v[0] += r;

      if (this.v[1] == SqlMathUtil.FULLBITS_32) {
        this.v[1] = 0;
        if (this.v[2] == SqlMathUtil.FULLBITS_32) {
          this.v[2] = 0;
          if (this.v[3] == SqlMathUtil.FULLBITS_32) {
            SqlMathUtil.throwOverflowException();
          } else {
            ++this.v[3];
          }
        } else {
          ++this.v[2];
        }
      } else {
        ++this.v[1];
      }
    } else {
      this.v[0] += r;
    }
    updateCount();
  }
Adds the given value to this value. This version is destructive, meaning it
modifies this object.

@param r
         the value to add
common/src/java/org/apache/hadoop/hive/common/type/UnsignedInt128.java