1179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
2179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org// Use of this source code is governed by a BSD-style license that can be
3179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org// found in the LICENSE file. See the AUTHORS file for names of contributors.
4179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org
5179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org#ifndef STORAGE_LEVELDB_UTIL_HISTOGRAM_H_
6179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org#define STORAGE_LEVELDB_UTIL_HISTOGRAM_H_
7179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org
8179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org#include <string>
9179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org
10179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.orgnamespace leveldb {
11179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org
12179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.orgclass Histogram {
13179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org public:
14179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org  Histogram() { }
15179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org  ~Histogram() { }
16179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org
17179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org  void Clear();
18179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org  void Add(double value);
19d36ce84e66c7d3cee978fbeb52721c30dfb842a5gabor@google.com  void Merge(const Histogram& other);
20179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org
21179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org  std::string ToString() const;
22179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org
23179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org private:
24179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org  double min_;
25179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org  double max_;
26179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org  double num_;
27179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org  double sum_;
28179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org  double sum_squares_;
29179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org
30179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org  enum { kNumBuckets = 154 };
31179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org  static const double kBucketLimit[kNumBuckets];
32179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org  double buckets_[kNumBuckets];
33179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org
34179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org  double Median() const;
35179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org  double Percentile(double p) const;
36179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org  double Average() const;
37179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org  double StandardDeviation() const;
38179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org};
39179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org
4045b9940be332834440bd5299419f396e38085ebehans@chromium.org}  // namespace leveldb
41179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org
42179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org#endif  // STORAGE_LEVELDB_UTIL_HISTOGRAM_H_
43