Skip to content

Commit d81fd3b

Browse files
sjanelgjasny
authored andcommitted
Add new constructor for Histogram and Summary taking rvalue ref of parameters
1 parent 4d66807 commit d81fd3b

4 files changed

Lines changed: 28 additions & 11 deletions

File tree

core/include/prometheus/histogram.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ class PROMETHEUS_CPP_CORE_EXPORT Histogram {
4444
/// exponential etc..
4545
///
4646
/// The bucket boundaries cannot be changed once the histogram is created.
47-
Histogram(const BucketBoundaries& buckets);
47+
explicit Histogram(const BucketBoundaries& buckets);
48+
49+
explicit Histogram(BucketBoundaries&& buckets);
4850

4951
/// \brief Observe the given amount.
5052
///
@@ -68,7 +70,7 @@ class PROMETHEUS_CPP_CORE_EXPORT Histogram {
6870
ClientMetric Collect() const;
6971

7072
private:
71-
const BucketBoundaries bucket_boundaries_;
73+
BucketBoundaries bucket_boundaries_;
7274
mutable std::mutex mutex_;
7375
std::vector<Counter> bucket_counts_;
7476
Gauge sum_;

core/include/prometheus/summary.h

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,13 @@ class PROMETHEUS_CPP_CORE_EXPORT Summary {
7171
/// and how smooth the time window is moved. With only one age bucket it
7272
/// effectively results in a complete reset of the summary each time max_age
7373
/// has passed. The default value is 5.
74-
Summary(const Quantiles& quantiles,
75-
std::chrono::milliseconds max_age = std::chrono::seconds{60},
76-
int age_buckets = 5);
74+
explicit Summary(const Quantiles& quantiles,
75+
std::chrono::milliseconds max_age = std::chrono::seconds{60},
76+
int age_buckets = 5);
77+
78+
explicit Summary(Quantiles&& quantiles,
79+
std::chrono::milliseconds max_age = std::chrono::seconds{60},
80+
int age_buckets = 5);
7781

7882
/// \brief Observe the given amount.
7983
void Observe(double value);
@@ -84,10 +88,10 @@ class PROMETHEUS_CPP_CORE_EXPORT Summary {
8488
ClientMetric Collect() const;
8589

8690
private:
87-
const Quantiles quantiles_;
91+
Quantiles quantiles_;
8892
mutable std::mutex mutex_;
89-
std::uint64_t count_;
90-
double sum_;
93+
std::uint64_t count_{};
94+
double sum_{};
9195
detail::TimeWindowQuantiles quantile_values_;
9296
};
9397

core/src/histogram.cc

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,15 @@ bool is_strict_sorted(ForwardIterator first, ForwardIterator last) {
2323
} // namespace
2424

2525
Histogram::Histogram(const BucketBoundaries& buckets)
26-
: bucket_boundaries_{buckets}, bucket_counts_{buckets.size() + 1}, sum_{} {
26+
: bucket_boundaries_{buckets}, bucket_counts_{buckets.size() + 1} {
27+
if (!is_strict_sorted(begin(bucket_boundaries_), end(bucket_boundaries_))) {
28+
throw std::invalid_argument("Bucket Boundaries must be strictly sorted");
29+
}
30+
}
31+
32+
Histogram::Histogram(BucketBoundaries&& buckets)
33+
: bucket_boundaries_{std::move(buckets)},
34+
bucket_counts_{bucket_boundaries_.size() + 1} {
2735
if (!is_strict_sorted(begin(bucket_boundaries_), end(bucket_boundaries_))) {
2836
throw std::invalid_argument("Bucket Boundaries must be strictly sorted");
2937
}

core/src/summary.cc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@ namespace prometheus {
77
Summary::Summary(const Quantiles& quantiles,
88
const std::chrono::milliseconds max_age, const int age_buckets)
99
: quantiles_{quantiles},
10-
count_{0},
11-
sum_{0},
10+
quantile_values_{quantiles_, max_age, age_buckets} {}
11+
12+
Summary::Summary(Quantiles&& quantiles, const std::chrono::milliseconds max_age,
13+
const int age_buckets)
14+
: quantiles_{std::move(quantiles)},
1215
quantile_values_{quantiles_, max_age, age_buckets} {}
1316

1417
void Summary::Observe(const double value) {

0 commit comments

Comments
 (0)