#include <boost/utility.hpp>
#include <boost/ptr_container/ptr_vector.hpp>
#include <boost/signals.hpp>
-#include "Exception.hh"
#include <senf/Utils/Logger/Logger.hh>
-#include <senf/Utils/Console/Console.hh>
+#include <senf/Utils/Console/ScopedDirectory.hh>
+#include "StatisticAccumulator.hh"
+#include "Exception.hh"
//#include "Statistics.mpp"
-///////////////////////////////hh.p////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
namespace senf {
The statistics functionality has two parts:
\li the senf::Statistics class
+ \li the senf::StatisticsAccumulator class
\li statistics sources
Each senf::Statistics instance collects information about a single parameter. Which
struct OutputEntry;
public:
- ///////////////////////////////////////////////////////////////////////////
+ //-////////////////////////////////////////////////////////////////////////
// Types
typedef boost::iterator_range<ValueIterator> CollectorRange;
template <class OtherOwner> friend class OutputProxy;
};
- ///////////////////////////////////////////////////////////////////////////
+ //-////////////////////////////////////////////////////////////////////////
///\name Accessing the current value
- ///\{
+ //\{
float min() const; ///< Last min value entered
float avg() const; ///< Last avg value entered
/**< \returns number of basic values collected into each new
value by this collector. */
- ///\}
- ///////////////////////////////////////////////////////////////////////////
+ //\}
+ //-////////////////////////////////////////////////////////////////////////
///\name Child collectors
- ///\{
+ //\{
Collector & operator[](unsigned rank);
///< Get child collector
collector collects into each combined value.
\throws InvalidRankException if \a rank is not a valid
registered rank value. */
+ Collector const & operator[](unsigned rank) const;
+ ///< Get child collector
+ /**< This member will return a const reference to the
+ collector collecting \a rank values.
+ \param[in] rank Number of values the requested
+ collector collects into each combined value.
+ \throws InvalidRankException if \a rank is not a valid
+ registered rank value. */
CollectorRange collectors(); ///< List all child collectors
/**< \returns iterator range of child collector
references */
is empty, otherwise it is built by joining the
collector ranks. */
- ///\}
- ///////////////////////////////////////////////////////////////////////////
+ //\}
+ //-////////////////////////////////////////////////////////////////////////
///\name Result generation
OutputProxy<StatisticsBase> output(unsigned n = 1u);
\endcode
\param[in] n size of sliding average window */
- ///\}
- ///////////////////////////////////////////////////////////////////////////
+ //\}
+ //-////////////////////////////////////////////////////////////////////////
// Exceptions
struct InvalidRankException : public senf::Exception
///< Same as operator() with \a min == \a avg == \a max
/**< Provided so a Statistics instance can be directly used
as a signal target. */
+ void operator()(StatisticsData const & data);
+ ///< Same as operator(), but imports statistics data from a StatisticsData object
+ /**< Provided so a Statistics instance can be directly used
+ as a signal target. */
+ template <class Value>
+ void operator()(unsigned n, StatisticAccumulator<Value> & sa);
+ ///< Same as operator() gathers values from StatisticAccumulator
+ /**< Provided so a Statistics instance can be directly used
+ as a signal target. Caution: Clears values in
+ StatisticAccumulator afterwards
+ \param[in] n number of time-slices
+ \param[in] sa StatisticAccumulator*/
StatisticsBase::OutputProxy<Statistics> output(unsigned n = 1u);
}
-///////////////////////////////hh.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
#include "Statistics.cci"
//#include "Statistics.ct"
#include "Statistics.cti"