sample_map.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// SampleMap implements HistogramSamples interface. It is used by the
6// SparseHistogram class to store samples.
7
8#ifndef BASE_METRICS_SAMPLE_MAP_H_
9#define BASE_METRICS_SAMPLE_MAP_H_
10
11#include <map>
12
13#include "base/compiler_specific.h"
14#include "base/memory/scoped_ptr.h"
15#include "base/metrics/histogram_base.h"
16#include "base/metrics/histogram_samples.h"
17
18namespace base {
19
20class BASE_EXPORT_PRIVATE SampleMap : public HistogramSamples {
21 public:
22  SampleMap();
23  virtual ~SampleMap();
24
25  // HistogramSamples implementation:
26  virtual void Accumulate(HistogramBase::Sample value,
27                          HistogramBase::Count count) OVERRIDE;
28  virtual HistogramBase::Count GetCount(
29      HistogramBase::Sample value) const OVERRIDE;
30  virtual HistogramBase::Count TotalCount() const OVERRIDE;
31  virtual scoped_ptr<SampleCountIterator> Iterator() const OVERRIDE;
32
33 protected:
34  virtual bool AddSubtractImpl(
35      SampleCountIterator* iter,
36      HistogramSamples::Operator op) OVERRIDE;  // |op| is ADD or SUBTRACT.
37
38 private:
39  std::map<HistogramBase::Sample, HistogramBase::Count> sample_counts_;
40
41  DISALLOW_COPY_AND_ASSIGN(SampleMap);
42};
43
44class BASE_EXPORT_PRIVATE SampleMapIterator : public SampleCountIterator {
45 public:
46  typedef std::map<HistogramBase::Sample, HistogramBase::Count>
47      SampleToCountMap;
48
49  explicit SampleMapIterator(const SampleToCountMap& sample_counts);
50  virtual ~SampleMapIterator();
51
52  // SampleCountIterator implementation:
53  virtual bool Done() const OVERRIDE;
54  virtual void Next() OVERRIDE;
55  virtual void Get(HistogramBase::Sample* min,
56                   HistogramBase::Sample* max,
57                   HistogramBase::Count* count) const OVERRIDE;
58 private:
59  SampleToCountMap::const_iterator iter_;
60  const SampleToCountMap::const_iterator end_;
61};
62
63}  // namespace base
64
65#endif  // BASE_METRICS_SAMPLE_MAP_H_
66