// This file is part of OpenTSDB. // Copyright (C) 2010-2012 The OpenTSDB Authors. // // This program is free software: you can redistribute it and/or modify it // under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 2.1 of the License, or (at your // option) any later version. This program is distributed in the hope that it // will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser // General Public License for more details. You should have received a copy // of the GNU Lesser General Public License along with this program. If not, // see <http://www.gnu.org/licenses/>. package net.opentsdb.core; import java.util.NoSuchElementException; /** * A function capable of aggregating multiple {@link DataPoints} together. * <p> * All aggregators must be stateless. All they can do is run through a * sequence of {@link Longs Longs} or {@link Doubles Doubles} and return an * aggregated value. */ public interface Aggregator { /** * A sequence of {@code long}s. * <p> * This interface is semantically equivalent to * {@code Iterator<long>}. */ public interface Longs { /** * Returns {@code true} if this sequence has more values. * {@code false} otherwise. */ boolean hasNextValue(); /** * Returns the next {@code long} value in this sequence. * @throws NoSuchElementException if calling {@link #hasNextValue} returns * {@code false}. */ long nextLongValue(); } /** * A sequence of {@code double}s. * <p> * This interface is semantically equivalent to * {@code Iterator<double>}. */ public interface Doubles { /** * Returns {@code true} if this sequence has more values. * {@code false} otherwise. */ boolean hasNextValue(); /** * Returns the next {@code double} value in this sequence. * @throws NoSuchElementException if calling {@link #hasNextValue} returns * {@code false}. */ double nextDoubleValue(); } /** * Aggregates a sequence of {@code long}s. * @param values The sequence to aggregate. * @return The aggregated value. */ long runLong(Longs values); /** * Aggregates a sequence of {@code double}s. * @param values The sequence to aggregate. * @return The aggregated value. */ double runDouble(Doubles values); }