/* * This file is part of libgim. * * libgim is free software: you can redistribute it and/or modify it under the * terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * libgim 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 General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with libgim. If not, see . * * Copyright 2010 Danny Robson */ #include "stats.hpp" #include #include template util::stats::accumulator::accumulator (): 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 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 &);