histogram.cc
Go to the documentation of this file.
00001 /* histogram.cc
00002  */
00003 #include "osl/stat/histogram.h"
00004 #include <iostream>
00005 #include <iomanip>
00006 
00007 osl::stat::
00008 Histogram::Histogram(size_t w, size_t len, int s, bool sd)
00009   : data(new double[len]), length_(len), width_(w), start_(s),
00010     show_on_destruct(sd)
00011 {
00012   std::fill(&data[0], &data[0]+length_, 0);
00013 }
00014 osl::stat::
00015 Histogram::~Histogram()
00016 {
00017   if (show_on_destruct)
00018     show(std::cerr);
00019 }
00020 void osl::stat::
00021 Histogram::merge(const Histogram& o)
00022 {
00023   if ((width_ == o.width_)
00024       && (length_ == o.length_)
00025       && (start_ == o.start_))
00026   {
00027     for (size_t i=0; i<length_; ++i)
00028     {
00029       data[i] += o.data[i];
00030     }
00031   }
00032 }
00033 
00034 void osl::stat::
00035 Histogram::show(std::ostream& os) const
00036 {
00037   int value=start_;
00038   for (size_t i=0; i<length_; ++i, value+=width_)
00039   {
00040     os << std::setw(5) << value << " - " << std::setw(5);
00041     os << value+(int)width_;
00042     os << " " << std::setw(8) << (size_t)data[i] << "\n";
00043   }
00044 }
00045 
00046 void osl::stat::
00047 Histogram::showRatio(std::ostream& os, const Histogram& o) const
00048 {
00049   if ((width_ == o.width_)
00050       && (length_ == o.length_)
00051       && (start_ == o.start_))
00052   {
00053     int value=start_;
00054     for (size_t i=0; i<length_; ++i, value+=width_)
00055     {
00056       os << std::setw(5) << value << " - " << std::setw(5);
00057       if (i+1 < length_)
00058         os << value+(int)width_;
00059       else
00060         os << " ";
00061       os << std::setw(8) << o.data[i]
00062          << std::setw(8) << data[i]
00063          << std::setw(8) << std::setprecision(2)
00064          << static_cast<double>(o.data[i])/data[i] << "\n";
00065     }
00066   }
00067 }
00068  
00069 /* ------------------------------------------------------------------------- */
00070 // ;;; Local Variables:
00071 // ;;; mode:c++
00072 // ;;; c-basic-offset:2
00073 // ;;; End:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines