inline std::ostream & operator<< (std::ostream & os, Timer const & t) { Timer::timer_t r = t.results.back(); os.width(30); os.fill(' '); os << t.name << "\t"; os << r / Timer::usec_factor << "." << std::setw(6) << std::setfill('0') << r % Timer::usec_factor << " sec"; r = std::accumulate(t.results.begin(), t.results.end(), 0LL); os << "\t Sum: " << r / Timer::usec_factor << "." << std::setw(6) << std::setfill('0') << r % Timer::usec_factor << " sec"; r = r / t.results.size(); os << "\tAvg: " << r / Timer::usec_factor << "." << std::setw(6) << std::setfill('0') << r % Timer::usec_factor << " sec"; r = *std::min_element(t.results.begin(), t.results.end()); os << "\tMin: " << r / Timer::usec_factor << "." << std::setw(6) << std::setfill('0') << r % Timer::usec_factor << " sec"; r = *std::max_element(t.results.begin(), t.results.end()); os << "\tMax: " << r / Timer::usec_factor << "." << std::setw(6) << std::setfill('0') << r % Timer::usec_factor << " sec"; Timer::results_t md = t.results; nth_element(md.begin(), md.begin()+md.size()/2, md.end()); r=*(md.begin()+md.size()/2); os << "\tMedian: " << r / Timer::usec_factor << "." << std::setw(6) << std::setfill('0') << r % Timer::usec_factor << " sec" << std::endl; return os; }
std::string Timer::getMedian () const { Timer::results_t md = results; nth_element (md.begin (), md.begin () + md.size () / 2, md.end ()); Timer::timer_t r = *(md.begin () + md.size () / 2); std::ostringstream os; os << r / Timer::usec_factor << "." << std::setw (6) << std::setfill ('0') << r % Timer::usec_factor; return os.str (); }