12 #include "opentelemetry/common/spin_lock_mutex.h"
13 #include "opentelemetry/nostd/variant.h"
14 #include "opentelemetry/sdk/metrics/aggregation/aggregation.h"
15 #include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h"
16 #include "opentelemetry/sdk/metrics/data/metric_data.h"
17 #include "opentelemetry/sdk/metrics/data/point_data.h"
18 #include "opentelemetry/version.h"
25 class AggregationConfig;
40 std::unique_ptr<Aggregation>
Merge(
const Aggregation &delta)
const noexcept
override;
47 std::unique_ptr<Aggregation>
Diff(
const Aggregation &next)
const noexcept
override;
54 bool record_min_max_ = true;
70 std::unique_ptr<Aggregation>
Merge(
const Aggregation &delta)
const noexcept
override;
77 std::unique_ptr<Aggregation>
Diff(
const Aggregation &next)
const noexcept
override;
83 mutable HistogramPointData point_data_;
84 bool record_min_max_ = true;
92 for (
size_t i = 0; i < current.counts_.size(); i++)
94 merge.counts_[i] = current.counts_[i] + delta.counts_[i];
96 merge.boundaries_ = current.boundaries_;
97 merge.sum_ = nostd::get<T>(current.sum_) + nostd::get<T>(delta.sum_);
98 merge.count_ = current.count_ + delta.count_;
99 merge.record_min_max_ = current.record_min_max_ && delta.record_min_max_;
100 if (merge.record_min_max_)
102 merge.min_ = (
std::min)(nostd::get<T>(current.min_), nostd::get<T>(delta.min_));
103 merge.max_ = (
std::max)(nostd::get<T>(current.max_), nostd::get<T>(delta.max_));
110 for (
size_t i = 0; i < current.
counts_.size(); i++)
122 auto low = std::lower_bound(boundaries.begin(), boundaries.end(), value);
123 return low - boundaries.begin();