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 18 namespace base { 19 20 class 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 44 class 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