/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * Copyright 2010 Danny Robson */ #include "stats.hpp" #include #include template cruft::stats::accumulator::accumulator () { reset (); } template void cruft::stats::accumulator::reset (void) { count = 0; min = std::numeric_limits::max (); max = std::numeric_limits::min (); sum = 0; } template void cruft::stats::accumulator::add (T val) { min = std::min (val, min); max = std::max (val, max); sum += val; ++count; } template void cruft::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 cruft::stats::accumulator::range (void) const { return max - min; } template T cruft::stats::accumulator::mean (void) const { return sum / count; } template struct cruft::stats::accumulator; template struct cruft::stats::accumulator; template struct cruft::stats::accumulator; template std::ostream& cruft::stats::operator<< (std::ostream &os, const accumulator &rhs) { os << "(min: " << rhs.min << ", max: " << rhs.max << ")"; return os; } template std::ostream& cruft::stats::operator<< (std::ostream&, const accumulator &); template std::ostream& cruft::stats::operator<< (std::ostream&, const accumulator &); template std::ostream& cruft::stats::operator<< (std::ostream&, const accumulator &);