/* * Copyright (c) 2008-2017, Hazelcast, Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.hazelcast.aggregation; import java.math.BigDecimal; import java.math.BigInteger; import java.util.List; final class Sums { private Sums() { } static Long sumIntegers(List<Integer> values) { long sum = 0L; for (Integer value : values) { sum += value; } return sum; } static Long sumLongs(List<Long> values) { long sum = 0L; for (long value : values) { sum += value; } return sum; } static double sumFloatingPointNumbers(List<? extends Number> values) { double sum = 0L; for (Number value : values) { sum += value.doubleValue(); } return sum; } static double sumDoubles(List<Double> values) { double sum = 0L; for (double value : values) { sum += value; } return sum; } static BigDecimal sumBigDecimals(List<BigDecimal> values) { BigDecimal sum = BigDecimal.ZERO; for (BigDecimal value : values) { sum = sum.add(value); } return sum; } static BigInteger sumBigIntegers(List<BigInteger> values) { BigInteger sum = BigInteger.ZERO; for (BigInteger value : values) { sum = sum.add(value); } return sum; } static long sumFixedPointNumbers(List<? extends Number> values) { long sum = 0L; for (Number value : values) { sum += value.longValue(); } return sum; } @SuppressWarnings("unchecked") static <T extends Number> T sumValueContainer(List<ValueContainer> values, ValueContainer.ValueType valueType) { switch (valueType) { case INTEGER: Long intSum = 0L; for (ValueContainer container : values) { intSum += container.intValue; } return (T) intSum; case LONG: Long longSum = 0L; for (ValueContainer container : values) { longSum += container.longValue; } return (T) longSum; case FLOAT: Double floatSum = 0d; for (ValueContainer container : values) { floatSum += container.floatValue; } return (T) floatSum; case DOUBLE: Double doubleSum = 0d; for (ValueContainer container : values) { doubleSum += container.doubleValue; } return (T) doubleSum; case BIG_DECIMAL: BigDecimal bigDecimalSum = BigDecimal.ZERO; for (ValueContainer container : values) { bigDecimalSum = bigDecimalSum.add(container.bigDecimal); } return (T) bigDecimalSum; case BIG_INTEGER: BigInteger bigIntegerSum = BigInteger.ZERO; for (ValueContainer container : values) { bigIntegerSum = bigIntegerSum.add(container.bigInteger); } return (T) bigIntegerSum; case NUMBER: Double numberSum = 0d; for (ValueContainer container : values) { numberSum += container.numberValue.doubleValue(); } return (T) numberSum; } return null; } }