Java Code Examples for com.google.common.math.IntMath#checkedAdd()
The following examples show how to use
com.google.common.math.IntMath#checkedAdd() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: PhoenixStatement.java From phoenix with Apache License 2.0 | 5 votes |
@Override /** * When getting the query timeout via JDBC timeouts must be expressed in seconds. Therefore * we need to convert the default millisecond timeout to seconds. */ public int getQueryTimeout() throws SQLException { // Convert milliseconds to seconds by taking the CEIL up to the next second int scaledValue; try { scaledValue = IntMath.checkedAdd(queryTimeoutMillis, 999); } catch (ArithmeticException e) { scaledValue = Integer.MAX_VALUE; } return scaledValue / 1000; }
Example 2
Source File: ConcurrentHashMultiset.java From codebuff with BSD 2-Clause "Simplified" License | 4 votes |
/** * Adds a number of occurrences of the specified element to this multiset. * * @param element the element to add * @param occurrences the number of occurrences to add * @return the previous count of the element before the operation; possibly zero * @throws IllegalArgumentException if {@code occurrences} is negative, or if * the resulting amount would exceed {@link Integer#MAX_VALUE} */ @CanIgnoreReturnValue @Override public int add(E element, int occurrences) { checkNotNull(element); if (occurrences == 0) { return count(element); } CollectPreconditions.checkPositive(occurrences, "occurences"); while (true) { AtomicInteger existingCounter = Maps.safeGet(countMap, element); if (existingCounter == null) { existingCounter = countMap.putIfAbsent(element, new AtomicInteger(occurrences)); if (existingCounter == null) { return 0; } // existingCounter != null: fall through to operate against the existing AtomicInteger } while (true) { int oldValue = existingCounter.get(); if (oldValue != 0) { try { int newValue = IntMath.checkedAdd(oldValue, occurrences); if (existingCounter.compareAndSet(oldValue, newValue)) { // newValue can't == 0, so no need to check & remove return oldValue; } } catch (ArithmeticException overflow) { throw new IllegalArgumentException("Overflow adding " + occurrences + " occurrences to a count of " + oldValue); } } else { // In the case of a concurrent remove, we might observe a zero value, which means another // thread is about to remove (element, existingCounter) from the map. Rather than wait, // we can just do that work here. AtomicInteger newCounter = new AtomicInteger(occurrences); if ((countMap.putIfAbsent(element, newCounter) == null) || countMap.replace(element, existingCounter, newCounter)) { return 0; } break; } } // If we're still here, there was a race, so just try again. } }
Example 3
Source File: ConcurrentHashMultiset.java From codebuff with BSD 2-Clause "Simplified" License | 4 votes |
/** * Adds a number of occurrences of the specified element to this multiset. * * @param element the element to add * @param occurrences the number of occurrences to add * @return the previous count of the element before the operation; possibly zero * @throws IllegalArgumentException if {@code occurrences} is negative, or if * the resulting amount would exceed {@link Integer#MAX_VALUE} */ @CanIgnoreReturnValue @Override public int add(E element, int occurrences) { checkNotNull(element); if (occurrences == 0) { return count(element); } CollectPreconditions.checkPositive(occurrences, "occurences"); while (true) { AtomicInteger existingCounter = Maps.safeGet(countMap, element); if (existingCounter == null) { existingCounter = countMap.putIfAbsent(element, new AtomicInteger(occurrences)); if (existingCounter == null) { return 0; } // existingCounter != null: fall through to operate against the existing AtomicInteger } while (true) { int oldValue = existingCounter.get(); if (oldValue != 0) { try { int newValue = IntMath.checkedAdd(oldValue, occurrences); if (existingCounter.compareAndSet(oldValue, newValue)) { // newValue can't == 0, so no need to check & remove return oldValue; } } catch (ArithmeticException overflow) { throw new IllegalArgumentException("Overflow adding " + occurrences + " occurrences to a count of " + oldValue); } } else { // In the case of a concurrent remove, we might observe a zero value, which means another // thread is about to remove (element, existingCounter) from the map. Rather than wait, // we can just do that work here. AtomicInteger newCounter = new AtomicInteger(occurrences); if ((countMap.putIfAbsent(element, newCounter) == null) || countMap.replace(element, existingCounter, newCounter)) { return 0; } break; } } // If we're still here, there was a race, so just try again. } }
Example 4
Source File: ConcurrentHashMultiset.java From codebuff with BSD 2-Clause "Simplified" License | 4 votes |
/** * Adds a number of occurrences of the specified element to this multiset. * * @param element the element to add * @param occurrences the number of occurrences to add * @return the previous count of the element before the operation; possibly zero * @throws IllegalArgumentException if {@code occurrences} is negative, or if * the resulting amount would exceed {@link Integer#MAX_VALUE} */ @CanIgnoreReturnValue @Override public int add(E element, int occurrences) { checkNotNull(element); if (occurrences == 0) { return count(element); } CollectPreconditions.checkPositive(occurrences, "occurences"); while (true) { AtomicInteger existingCounter = Maps.safeGet(countMap, element); if (existingCounter == null) { existingCounter = countMap.putIfAbsent(element, new AtomicInteger(occurrences)); if (existingCounter == null) { return 0; } // existingCounter != null: fall through to operate against the existing AtomicInteger } while (true) { int oldValue = existingCounter.get(); if (oldValue != 0) { try { int newValue = IntMath.checkedAdd(oldValue, occurrences); if (existingCounter.compareAndSet(oldValue, newValue)) { // newValue can't == 0, so no need to check & remove return oldValue; } } catch (ArithmeticException overflow) { throw new IllegalArgumentException("Overflow adding " + occurrences + " occurrences to a count of " + oldValue); } } else { // In the case of a concurrent remove, we might observe a zero value, which means another // thread is about to remove (element, existingCounter) from the map. Rather than wait, // we can just do that work here. AtomicInteger newCounter = new AtomicInteger(occurrences); if ((countMap.putIfAbsent(element, newCounter) == null) || countMap.replace(element, existingCounter, newCounter)) { return 0; } break; } } // If we're still here, there was a race, so just try again. } }
Example 5
Source File: ConcurrentHashMultiset.java From codebuff with BSD 2-Clause "Simplified" License | 4 votes |
/** * Adds a number of occurrences of the specified element to this multiset. * * @param element the element to add * @param occurrences the number of occurrences to add * @return the previous count of the element before the operation; possibly zero * @throws IllegalArgumentException if {@code occurrences} is negative, or if * the resulting amount would exceed {@link Integer#MAX_VALUE} */ @CanIgnoreReturnValue @Override public int add(E element, int occurrences) { checkNotNull(element); if (occurrences == 0) { return count(element); } CollectPreconditions.checkPositive(occurrences, "occurences"); while (true) { AtomicInteger existingCounter = Maps.safeGet(countMap, element); if (existingCounter == null) { existingCounter = countMap.putIfAbsent(element, new AtomicInteger(occurrences)); if (existingCounter == null) { return 0; } // existingCounter != null: fall through to operate against the existing AtomicInteger } while (true) { int oldValue = existingCounter.get(); if (oldValue != 0) { try { int newValue = IntMath.checkedAdd(oldValue, occurrences); if (existingCounter.compareAndSet(oldValue, newValue)) { // newValue can't == 0, so no need to check & remove return oldValue; } } catch (ArithmeticException overflow) { throw new IllegalArgumentException("Overflow adding " + occurrences + " occurrences to a count of " + oldValue); } } else { // In the case of a concurrent remove, we might observe a zero value, which means another // thread is about to remove (element, existingCounter) from the map. Rather than wait, // we can just do that work here. AtomicInteger newCounter = new AtomicInteger(occurrences); if ((countMap.putIfAbsent(element, newCounter) == null) || countMap.replace(element, existingCounter, newCounter)) { return 0; } break; } } // If we're still here, there was a race, so just try again. } }
Example 6
Source File: ConcurrentHashMultiset.java From codebuff with BSD 2-Clause "Simplified" License | 4 votes |
/** * Adds a number of occurrences of the specified element to this multiset. * * @param element the element to add * @param occurrences the number of occurrences to add * @return the previous count of the element before the operation; possibly zero * @throws IllegalArgumentException if {@code occurrences} is negative, or if * the resulting amount would exceed {@link Integer#MAX_VALUE} */ @CanIgnoreReturnValue @Override public int add(E element, int occurrences) { checkNotNull(element); if (occurrences == 0) { return count(element); } CollectPreconditions.checkPositive(occurrences, "occurences"); while (true) { AtomicInteger existingCounter = Maps.safeGet(countMap, element); if (existingCounter == null) { existingCounter = countMap.putIfAbsent(element, new AtomicInteger(occurrences)); if (existingCounter == null) { return 0; } // existingCounter != null: fall through to operate against the existing AtomicInteger } while (true) { int oldValue = existingCounter.get(); if (oldValue != 0) { try { int newValue = IntMath.checkedAdd(oldValue, occurrences); if (existingCounter.compareAndSet(oldValue, newValue)) { // newValue can't == 0, so no need to check & remove return oldValue; } } catch (ArithmeticException overflow) { throw new IllegalArgumentException( "Overflow adding " + occurrences + " occurrences to a count of " + oldValue); } } else { // In the case of a concurrent remove, we might observe a zero value, which means another // thread is about to remove (element, existingCounter) from the map. Rather than wait, // we can just do that work here. AtomicInteger newCounter = new AtomicInteger(occurrences); if ((countMap.putIfAbsent(element, newCounter) == null) || countMap.replace(element, existingCounter, newCounter)) { return 0; } break; } } // If we're still here, there was a race, so just try again. } }
Example 7
Source File: GuavaMathUnitTest.java From tutorials with MIT License | 4 votes |
@Test(expected = ArithmeticException.class) public void whenSumOverflow_thenThrowException() { IntMath.checkedAdd(Integer.MAX_VALUE, 1); }
Example 8
Source File: GuavaMathUnitTest.java From tutorials with MIT License | 4 votes |
@Test(expected = ArithmeticException.class) public void whenSumUnderflow_thenThrowException() { IntMath.checkedAdd(Integer.MIN_VALUE, -1); }
Example 9
Source File: GuavaMathUnitTest.java From tutorials with MIT License | 4 votes |
@Test public void should_calculate_sum() { int result = IntMath.checkedAdd(2, 1); assertThat(result, equalTo(3)); }
Example 10
Source File: GuavaIntMathUnitTest.java From tutorials with MIT License | 4 votes |
@Test public void whenCheckedAddTwoIntegerValues_shouldAddThemAndReturnTheSumIfNotOverflow() { int result = IntMath.checkedAdd(1, 2); assertEquals(3, result); }
Example 11
Source File: GuavaIntMathUnitTest.java From tutorials with MIT License | 4 votes |
@Test(expected = ArithmeticException.class) public void gwhenCheckedAddTwoIntegerValues_shouldThrowArithmeticExceptionIfOverflow() { IntMath.checkedAdd(Integer.MAX_VALUE, 100); }