// $Id$ // // Copyright (C) 2008 // Fraunhofer Institute for Open Communication Systems (FOKUS) // // The contents of this file are subject to the Fraunhofer FOKUS Public License // Version 1.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://senf.berlios.de/license.html // // The Fraunhofer FOKUS Public License Version 1.0 is based on, // but modifies the Mozilla Public License Version 1.1. // See the full license text for the amendments. // // Software distributed under the License is distributed on an "AS IS" basis, // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License // for the specific language governing rights and limitations under the License. // // The Original Code is Fraunhofer FOKUS code. // // The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. // (registered association), Hansastraße 27 c, 80686 Munich, Germany. // All Rights Reserved. // // Contributor(s): // Stefan Bund /** \file \brief Statistics inline non-template implementation */ //#include "Statistics.ih" // Custom includes #include #include #include "Range.hh" #define prefix_ inline //-///////////////////////////////////////////////////////////////////////////////////////////////// //-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::StatisticsBase::OutputEntry prefix_ senf::StatisticsBase::OutputEntry::OutputEntry() : n(), min(), avg(), max(), dev() { initDir(); } prefix_ senf::StatisticsBase::OutputEntry::OutputEntry(unsigned n_) : n(n_), min(), avg(), max(), dev() { initDir(); } prefix_ senf::StatisticsBase::OutputEntry::OutputEntry(const OutputEntry& other) : n(other.n), min(other.min), avg(other.avg), max(other.max), dev(other.dev) { initDir(); } prefix_ void senf::StatisticsBase::OutputEntry::initDir() { dir.add("list", console::factory::Command(&OutputEntry::consoleList, this) .doc("List all known connected targets. This list might not be complete.") ); } prefix_ senf::StatisticsBase::OutputEntry & senf::StatisticsBase::OutputEntry::operator=(const OutputEntry& other) { n = other.n; min = other.min; avg = other.avg; max = other.max; dev = other.dev; return *this; } //-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::StatisticsBase prefix_ senf::StatisticsBase::StatisticsBase() : min_ (0.0f), avg_ (0.0f), max_ (0.0f), dev_ (0.0f), maxQueueLen_ (0u) {} prefix_ senf::StatisticsBase::~StatisticsBase() {} prefix_ senf::StatisticsBase::CollectorRange senf::StatisticsBase::collectors() { return senf::make_transform_range(children_,__gnu_cxx::select2nd()); } prefix_ senf::StatisticsBase::const_CollectorRange senf::StatisticsBase::collectors() const { return senf::make_transform_range(children_,__gnu_cxx::select2nd()); } prefix_ float senf::StatisticsBase::min() const { return min_; } prefix_ float senf::StatisticsBase::avg() const { return avg_; } prefix_ float senf::StatisticsBase::max() const { return max_; } prefix_ float senf::StatisticsBase::dev() const { return dev_; } prefix_ unsigned senf::StatisticsBase::rank() const { return 1; } prefix_ senf::Statistics & senf::StatisticsBase::base() { return v_base(); } prefix_ senf::Statistics const & senf::StatisticsBase::base() const { return const_cast(this)->v_base(); } prefix_ std::string senf::StatisticsBase::path() const { return v_path(); } prefix_ senf::StatisticsData senf::StatisticsBase::data() const { return StatisticsData(min_, avg_, max_, dev_, 0); } //-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::Collector prefix_ senf::Collector::Collector(StatisticsBase * owner, unsigned rank) : rank_ (rank), i_ (0u), accMin_ (FLT_MAX), accSum_ (0.0f), accSumSq_ (0.0f), accMax_ (-FLT_MAX), owner_ (owner) {} prefix_ unsigned senf::Collector::rank() const { return rank_; } prefix_ senf::StatisticsBase::OutputProxy senf::Collector::output(unsigned n) { return StatisticsBase::OutputProxy(this, StatisticsBase::output(n)); } //-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::Statistics prefix_ void senf::Statistics::operator()(unsigned n, float min, float avg, float max, float dev) { enter(n, min, avg, max, dev); } prefix_ void senf::Statistics::operator()(float min, float avg, float max, float dev) { enter(1, min, avg, max, dev); } prefix_ void senf::Statistics::operator()(StatisticsData const & data) { enter(1, data.min, data.avg, data.max, data.stddev); } prefix_ void senf::Statistics::operator()(float value, float dev) { enter(1, value, value, value, dev); } prefix_ senf::StatisticsBase::OutputProxy senf::Statistics::output(unsigned n) { return StatisticsBase::OutputProxy(this, StatisticsBase::output(n)); } //-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_ // Local Variables: // mode: c++ // fill-column: 100 // comment-column: 40 // c-file-style: "senf" // indent-tabs-mode: nil // ispell-local-dictionary: "american" // compile-command: "scons -u test" // End: