From 71cb32cb8ed91acea18c027e9b5ffa11e70fa814 Mon Sep 17 00:00:00 2001 From: Ruslan Nigmatullin Date: Wed, 31 May 2023 13:06:03 -0700 Subject: [PATCH] fix msvc, make index signed, add moving constructors --- .../sdk/metrics/data/circular_buffer.h | 22 +++++++++++-------- sdk/src/metrics/data/circular_buffer.cc | 14 ++++++------ 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/data/circular_buffer.h b/sdk/include/opentelemetry/sdk/metrics/data/circular_buffer.h index 80b179e319..d66f9b38b8 100644 --- a/sdk/include/opentelemetry/sdk/metrics/data/circular_buffer.h +++ b/sdk/include/opentelemetry/sdk/metrics/data/circular_buffer.h @@ -31,7 +31,9 @@ class AdaptingIntegerArray // Construct an adapting integer array of a given size. explicit AdaptingIntegerArray(size_t size) : backing_(std::vector(size, 0)) {} AdaptingIntegerArray(const AdaptingIntegerArray &other) = default; + AdaptingIntegerArray(AdaptingIntegerArray &&other) = default; AdaptingIntegerArray &operator=(const AdaptingIntegerArray &other) = default; + AdaptingIntegerArray &operator=(AdaptingIntegerArray &&other) = default; /** * Increments the value at the specified index by the given count in the array. @@ -85,7 +87,9 @@ class AdaptingCircularBufferCounter public: explicit AdaptingCircularBufferCounter(size_t max_size) : backing_(max_size) {} AdaptingCircularBufferCounter(const AdaptingCircularBufferCounter &other) = default; + AdaptingCircularBufferCounter(AdaptingCircularBufferCounter &&other) = default; AdaptingCircularBufferCounter &operator=(const AdaptingCircularBufferCounter &other) = default; + AdaptingCircularBufferCounter &operator=(AdaptingCircularBufferCounter &&other) = default; /** * The first index with a recording. May be negative. @@ -94,7 +98,7 @@ class AdaptingCircularBufferCounter * * @return the first index with a recording. */ - size_t StartIndex() const { return start_index_; } + int32_t StartIndex() const { return start_index_; } /** * The last index with a recording. May be negative. @@ -103,7 +107,7 @@ class AdaptingCircularBufferCounter * * @return The last index with a recording. */ - size_t EndIndex() const { return end_index_; } + int32_t EndIndex() const { return end_index_; } /** * Returns true if no recordings, false if at least one recording. @@ -125,23 +129,23 @@ class AdaptingCircularBufferCounter * @param delta How much to increment the index by. * @return success status. */ - bool Increment(size_t index, uint64_t delta); + bool Increment(int32_t index, uint64_t delta); /** * Get the number of recordings for the given index. * * @return the number of recordings for the index, or 0 if the index is out of bounds. */ - uint64_t Get(size_t index); + uint64_t Get(int32_t index); private: - size_t ToBufferIndex(size_t index) const; + size_t ToBufferIndex(int32_t index) const; - static constexpr size_t kNullIndex = std::numeric_limits::max(); + static constexpr int32_t kNullIndex = std::numeric_limits::min(); - size_t start_index_ = kNullIndex; - size_t end_index_ = kNullIndex; - size_t base_index_ = kNullIndex; + int32_t start_index_ = kNullIndex; + int32_t end_index_ = kNullIndex; + int32_t base_index_ = kNullIndex; AdaptingIntegerArray backing_; }; diff --git a/sdk/src/metrics/data/circular_buffer.cc b/sdk/src/metrics/data/circular_buffer.cc index 4bce412788..f9c44c0cdf 100644 --- a/sdk/src/metrics/data/circular_buffer.cc +++ b/sdk/src/metrics/data/circular_buffer.cc @@ -44,7 +44,7 @@ struct AdaptingIntegerArrayGet struct AdaptingIntegerArraySize { template - uint64_t operator()(const std::vector &backing) + size_t operator()(const std::vector &backing) { return backing.size(); } @@ -55,7 +55,7 @@ struct AdaptingIntegerArrayClear template void operator()(std::vector &backing) { - std::fill(backing.begin(), backing.end(), 0); + std::fill(backing.begin(), backing.end(), static_cast(0)); } }; @@ -124,7 +124,7 @@ void AdaptingCircularBufferCounter::Clear() backing_.Clear(); } -bool AdaptingCircularBufferCounter::Increment(size_t index, uint64_t delta) +bool AdaptingCircularBufferCounter::Increment(int32_t index, uint64_t delta) { if (Empty()) { @@ -157,7 +157,7 @@ bool AdaptingCircularBufferCounter::Increment(size_t index, uint64_t delta) return true; } -uint64_t AdaptingCircularBufferCounter::Get(size_t index) +uint64_t AdaptingCircularBufferCounter::Get(int32_t index) { if (index < start_index_ || index > end_index_) { @@ -166,15 +166,15 @@ uint64_t AdaptingCircularBufferCounter::Get(size_t index) return backing_.Get(ToBufferIndex(index)); } -size_t AdaptingCircularBufferCounter::ToBufferIndex(size_t index) const +size_t AdaptingCircularBufferCounter::ToBufferIndex(int32_t index) const { // Figure out the index relative to the start of the circular buffer. if (index < base_index_) { // If index is before the base one, wrap around. - return index + backing_.Size() - base_index_; + return static_cast(index + backing_.Size() - base_index_); } - return index - base_index_; + return static_cast(index - base_index_); } } // namespace metrics