説明を見る。00001
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
00071
00072
00073