diff --git a/api/include/opentelemetry/context/context.h b/api/include/opentelemetry/context/context.h index a1379cdc64..06b95a6248 100644 --- a/api/include/opentelemetry/context/context.h +++ b/api/include/opentelemetry/context/context.h @@ -1,5 +1,6 @@ #pragma once +#include #include "opentelemetry/context/context_value.h" #include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/nostd/string_view.h" @@ -65,7 +66,7 @@ class Context { if (key.size() == data->key_length_) { - if (memcmp(key.data(), data->key_, data->key_length_) == 0) + if (std::memcmp(key.data(), data->key_, data->key_length_) == 0) { return data->value_; } @@ -81,7 +82,7 @@ class Context { if (key.size() == data->key_length_) { - if (memcmp(key.data(), data->key_, data->key_length_) == 0) + if (std::memcmp(key.data(), data->key_, data->key_length_) == 0) { return true; } diff --git a/api/include/opentelemetry/nostd/string_view.h b/api/include/opentelemetry/nostd/string_view.h index 315d038b3f..a5d65d00aa 100644 --- a/api/include/opentelemetry/nostd/string_view.h +++ b/api/include/opentelemetry/nostd/string_view.h @@ -118,7 +118,12 @@ class string_view inline bool operator==(string_view lhs, string_view rhs) noexcept { return lhs.length() == rhs.length() && +#if _MSC_VER == 1900 + // Avoid SCL error in Visual Studio 2015 + (std::memcmp(lhs.data(), rhs.data(), lhs.length()) == 0); +#else std::equal(lhs.data(), lhs.data() + lhs.length(), rhs.data()); +#endif } inline bool operator==(string_view lhs, const std::string &rhs) noexcept @@ -172,3 +177,18 @@ inline std::ostream &operator<<(std::ostream &os, string_view s) } } // namespace nostd OPENTELEMETRY_END_NAMESPACE + +namespace std +{ +template <> +struct hash +{ + std::size_t operator()(const OPENTELEMETRY_NAMESPACE::nostd::string_view &k) const + { + // TODO: for C++17 that has native support for std::basic_string_view it would + // be more performance-efficient to provide a zero-copy hash. + auto s = std::string(k.data(), k.size()); + return std::hash{}(s); + } +}; +} // namespace std diff --git a/api/include/opentelemetry/version.h b/api/include/opentelemetry/version.h index 1bbe71a217..aa0d16b0cc 100644 --- a/api/include/opentelemetry/version.h +++ b/api/include/opentelemetry/version.h @@ -12,4 +12,7 @@ #define OPENTELEMETRY_END_NAMESPACE \ }} + +#define OPENTELEMETRY_NAMESPACE opentelemetry :: OPENTELEMETRY_CONCAT(v, OPENTELEMETRY_ABI_VERSION_NO) + // clang-format on diff --git a/api/test/metrics/noop_metrics_test.cc b/api/test/metrics/noop_metrics_test.cc index 85533e070e..9580ebede5 100644 --- a/api/test/metrics/noop_metrics_test.cc +++ b/api/test/metrics/noop_metrics_test.cc @@ -4,6 +4,7 @@ #include "opentelemetry/metrics/observer_result.h" #include "opentelemetry/metrics/sync_instruments.h" +#include #include OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/api/test/nostd/utility_test.cc b/api/test/nostd/utility_test.cc index ee38f3f474..edf5cd3f9e 100644 --- a/api/test/nostd/utility_test.cc +++ b/api/test/nostd/utility_test.cc @@ -1,5 +1,6 @@ #include "opentelemetry/nostd/utility.h" +#include #include #include @@ -20,7 +21,8 @@ TEST(UtilityTest, Data) std::vector v = {1, 2, 3}; int array[3] = {1, 2, 3}; std::initializer_list list{1, 2, 3}; - int x; + int x = 0; + std::ignore = x; EXPECT_EQ(opentelemetry::nostd::data(v), v.data()); EXPECT_EQ(opentelemetry::nostd::data(array), array); @@ -32,7 +34,8 @@ TEST(UtilityTest, Size) { std::vector v = {1, 2, 3}; int array[3] = {1, 2, 3}; - int x; + int x = 0; + std::ignore = x; EXPECT_EQ(opentelemetry::nostd::size(v), v.size()); EXPECT_EQ(opentelemetry::nostd::size(array), 3); diff --git a/api/test/trace/key_value_iterable_view_test.cc b/api/test/trace/key_value_iterable_view_test.cc index 9c262eb3f1..641e649473 100644 --- a/api/test/trace/key_value_iterable_view_test.cc +++ b/api/test/trace/key_value_iterable_view_test.cc @@ -1,8 +1,8 @@ #include "opentelemetry/trace/key_value_iterable_view.h" -#include - #include +#include +#include "opentelemetry/nostd/type_traits.h" using namespace opentelemetry; diff --git a/exporters/ostream/include/opentelemetry/exporters/ostream/metrics_exporter.h b/exporters/ostream/include/opentelemetry/exporters/ostream/metrics_exporter.h index 312aecb6ea..0b31c779db 100644 --- a/exporters/ostream/include/opentelemetry/exporters/ostream/metrics_exporter.h +++ b/exporters/ostream/include/opentelemetry/exporters/ostream/metrics_exporter.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include "opentelemetry/sdk/metrics/aggregator/exact_aggregator.h" #include "opentelemetry/sdk/metrics/aggregator/gauge_aggregator.h" #include "opentelemetry/sdk/metrics/aggregator/histogram_aggregator.h" @@ -82,9 +83,9 @@ class OStreamMetricsExporter final : public sdkmetrics::MetricsExporter } else { - auto vec = agg->get_checkpoint(); - int size = vec.size(); - int i = 1; + auto vec = agg->get_checkpoint(); + size_t size = vec.size(); + int i = 1; sout_ << "\n values : " << '['; @@ -104,8 +105,8 @@ class OStreamMetricsExporter final : public sdkmetrics::MetricsExporter auto boundaries = agg->get_boundaries(); auto counts = agg->get_counts(); - int boundaries_size = boundaries.size(); - int counts_size = counts.size(); + size_t boundaries_size = boundaries.size(); + size_t counts_size = counts.size(); sout_ << "\n buckets : " << '['; @@ -134,8 +135,8 @@ class OStreamMetricsExporter final : public sdkmetrics::MetricsExporter auto boundaries = agg->get_boundaries(); auto counts = agg->get_counts(); - int boundaries_size = boundaries.size(); - int counts_size = counts.size(); + size_t boundaries_size = boundaries.size(); + size_t counts_size = counts.size(); sout_ << "\n buckets : " << '['; diff --git a/exporters/ostream/include/opentelemetry/exporters/ostream/span_exporter.h b/exporters/ostream/include/opentelemetry/exporters/ostream/span_exporter.h index e7dd1ed42a..a5077d1e8a 100644 --- a/exporters/ostream/include/opentelemetry/exporters/ostream/span_exporter.h +++ b/exporters/ostream/include/opentelemetry/exporters/ostream/span_exporter.h @@ -146,8 +146,8 @@ class OStreamSpanExporter final : public sdktrace::SpanExporter void printAttributes(std::unordered_map map) { - int size = map.size(); - int i = 1; + size_t size = map.size(); + size_t i = 1; for (auto kv : map) { sout_ << kv.first << ": "; diff --git a/ext/test/zpages/tracez_data_aggregator_test.cc b/ext/test/zpages/tracez_data_aggregator_test.cc index 035b2d8f26..64a873d2fb 100644 --- a/ext/test/zpages/tracez_data_aggregator_test.cc +++ b/ext/test/zpages/tracez_data_aggregator_test.cc @@ -51,8 +51,8 @@ class TracezDataAggregatorTest : public ::testing::Test void VerifySpanCountsInTracezData( const std::string &span_name, const TracezData &aggregated_data, - unsigned int running_span_count, - unsigned int error_span_count, + size_t running_span_count, + size_t error_span_count, std::array completed_span_count_per_latency_bucket) { // Asserts are needed to check the size of the container because they may need diff --git a/ext/test/zpages/tracez_processor_test.cc b/ext/test/zpages/tracez_processor_test.cc index 7b4c633926..ad356d880f 100644 --- a/ext/test/zpages/tracez_processor_test.cc +++ b/ext/test/zpages/tracez_processor_test.cc @@ -49,8 +49,8 @@ void UpdateSpans(std::shared_ptr &processor, */ bool ContainsNames(const std::vector &names, std::unordered_set &running, - unsigned int name_start = 0, - unsigned int name_end = 0, + size_t name_start = 0, + size_t name_end = 0, bool one_to_one_correspondence = false) { if (name_end == 0) @@ -97,15 +97,15 @@ bool ContainsNames(const std::vector &names, */ bool ContainsNames(const std::vector &names, std::vector> &completed, - unsigned int name_start = 0, - unsigned int name_end = 0, + size_t name_start = 0, + size_t name_end = 0, bool one_to_one_correspondence = false) { if (name_end == 0) name_end = names.size(); - unsigned int num_names = name_end - name_start; + size_t num_names = name_end - name_start; if (num_names > completed.size() || (one_to_one_correspondence && num_names != completed.size())) { diff --git a/sdk/include/opentelemetry/sdk/common/atomic_unique_ptr.h b/sdk/include/opentelemetry/sdk/common/atomic_unique_ptr.h index 1fdfee618c..d93d9b72b2 100644 --- a/sdk/include/opentelemetry/sdk/common/atomic_unique_ptr.h +++ b/sdk/include/opentelemetry/sdk/common/atomic_unique_ptr.h @@ -34,7 +34,7 @@ class AtomicUniquePtr /** * @return true if the pointer is null */ - bool IsNull() const noexcept { return ptr_ == nullptr; } + bool IsNull() const noexcept { return ptr_.load() == nullptr; } /** * Atomically swap the pointer only if it's null. diff --git a/sdk/include/opentelemetry/sdk/common/empty_attributes.h b/sdk/include/opentelemetry/sdk/common/empty_attributes.h index b4c69abe7d..b9741cd3a9 100644 --- a/sdk/include/opentelemetry/sdk/common/empty_attributes.h +++ b/sdk/include/opentelemetry/sdk/common/empty_attributes.h @@ -1,6 +1,9 @@ #include "opentelemetry/trace/key_value_iterable_view.h" +#include #include +#include +#include OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/aggregator/exact_aggregator.h b/sdk/include/opentelemetry/sdk/metrics/aggregator/exact_aggregator.h index f1a5242c48..b34bfd0643 100644 --- a/sdk/include/opentelemetry/sdk/metrics/aggregator/exact_aggregator.h +++ b/sdk/include/opentelemetry/sdk/metrics/aggregator/exact_aggregator.h @@ -145,8 +145,8 @@ class ExactAggregator : public Aggregator } else { - float position = float(this->checkpoint_.size() - 1) * q; - int ceiling = ceil(position); + float position = float(float(this->checkpoint_.size() - 1) * q); + int ceiling = int(ceil(position)); return this->checkpoint_[ceiling]; } } diff --git a/sdk/include/opentelemetry/sdk/metrics/aggregator/histogram_aggregator.h b/sdk/include/opentelemetry/sdk/metrics/aggregator/histogram_aggregator.h index 07b05c247c..785ae2733d 100644 --- a/sdk/include/opentelemetry/sdk/metrics/aggregator/histogram_aggregator.h +++ b/sdk/include/opentelemetry/sdk/metrics/aggregator/histogram_aggregator.h @@ -63,8 +63,8 @@ class HistogramAggregator final : public Aggregator void update(T val) override { this->mu_.lock(); - this->updated_ = true; - int bucketID = boundaries_.size(); + this->updated_ = true; + size_t bucketID = boundaries_.size(); for (size_t i = 0; i < boundaries_.size(); i++) { if (val < boundaries_[i]) // concurrent read is thread-safe diff --git a/sdk/include/opentelemetry/sdk/metrics/aggregator/sketch_aggregator.h b/sdk/include/opentelemetry/sdk/metrics/aggregator/sketch_aggregator.h index bc29868320..617d320570 100644 --- a/sdk/include/opentelemetry/sdk/metrics/aggregator/sketch_aggregator.h +++ b/sdk/include/opentelemetry/sdk/metrics/aggregator/sketch_aggregator.h @@ -118,7 +118,7 @@ class SketchAggregator final : public Aggregator idx = iter->first; count += iter->second; } - return round(2 * pow(gamma, idx) / (gamma + 1)); + return static_cast(round(2 * pow(gamma, idx) / (gamma + 1))); } /** diff --git a/sdk/test/common/circular_buffer_benchmark.cc b/sdk/test/common/circular_buffer_benchmark.cc index cec8c95f5f..cb6eba6482 100644 --- a/sdk/test/common/circular_buffer_benchmark.cc +++ b/sdk/test/common/circular_buffer_benchmark.cc @@ -102,8 +102,8 @@ static void RunSimulation(Buffer &buffer, int num_threads, int n) noexcept static void BM_BaselineBuffer(benchmark::State &state) { const size_t max_elements = 500; - auto num_threads = state.range(0); - const int n = N / num_threads; + const int num_threads = static_cast(state.range(0)); + const int n = static_cast(N / num_threads); BaselineCircularBuffer buffer{max_elements}; for (auto _ : state) { @@ -116,8 +116,8 @@ BENCHMARK(BM_BaselineBuffer)->Arg(1)->Arg(2)->Arg(4); static void BM_LockFreeBuffer(benchmark::State &state) { const size_t max_elements = 500; - auto num_threads = state.range(0); - const int n = N / num_threads; + const int num_threads = static_cast(state.range(0)); + const int n = static_cast(N / num_threads); CircularBuffer buffer{max_elements}; for (auto _ : state) { diff --git a/sdk/test/common/circular_buffer_test.cc b/sdk/test/common/circular_buffer_test.cc index 2fd9dc4dcc..404e8a0325 100644 --- a/sdk/test/common/circular_buffer_test.cc +++ b/sdk/test/common/circular_buffer_test.cc @@ -1,5 +1,6 @@ #include "opentelemetry/sdk/common/circular_buffer.h" +#include #include #include #include