/* * 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. * * Copyright 2010 Danny Robson */ #include "stats.hpp" #include template util::stats::accumulator::accumulator () { reset (); } template void util::stats::accumulator::reset (void) { count = 0; min = std::numeric_limits::max (); max = std::numeric_limits::min (); sum = 0; } template void util::stats::accumulator::add (T val) { min = std::min (val, min); max = std::max (val, max); sum += val; ++count; } template void util::stats::accumulator::add (const accumulator &rhs) { min = std::min (rhs.min, min); max = std::max (rhs.max, max); sum += rhs.sum; count += rhs.count; } template T util::stats::accumulator::range (void) const { return max - min; } template T util::stats::accumulator::mean (void) const { return sum / count; } template struct util::stats::accumulator; template struct util::stats::accumulator; template struct util::stats::accumulator; template std::ostream& util::stats::operator<< (std::ostream &os, const accumulator &rhs) { os << "(min: " << rhs.min << ", max: " << rhs.max << ")"; return os; } template std::ostream& util::stats::operator<< (std::ostream&, const accumulator &); template std::ostream& util::stats::operator<< (std::ostream&, const accumulator &); template std::ostream& util::stats::operator<< (std::ostream&, const accumulator &);