1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19
20 package org.apache.commons.compress.utils;
21
22 /**
23 * PRIVATE.
24 *
25 * Performs exact math through {@link Math} "exact" APIs.
26 */
27 public class ExactMath {
28
29 /**
30 * Returns the int result of adding an int and a long, and throws an exception if the result overflows an int.
31 *
32 * @param x the first value, an int.
33 * @param y the second value, a long,
34 * @return the addition of both values.
35 * @throws IllegalArgumentException when y or the result overflows an int
36 */
37 public static int add(final int x, final long y) {
38 try {
39 return Math.addExact(x, Math.toIntExact(y));
40 } catch (final ArithmeticException exp) {
41 throw new IllegalArgumentException("Argument too large or result overflows", exp);
42 }
43 }
44
45 private ExactMath() {
46 // no instances
47 }
48
49 }