NVIDIA DeepStream SDK API Reference

9.2 Release
includes/opentelemetry/trace/span_context_kv_iterable_view.h
Go to the documentation of this file.
1 // Copyright The OpenTelemetry Authors
2 // SPDX-License-Identifier: Apache-2.0
3 
4 #pragma once
5 
6 #include <iterator>
7 #include <type_traits>
8 #include <utility>
9 
10 #include "opentelemetry/common/key_value_iterable_view.h"
11 #include "opentelemetry/nostd/function_ref.h"
12 #include "opentelemetry/nostd/span.h"
13 #include "opentelemetry/nostd/string_view.h"
14 #include "opentelemetry/nostd/utility.h"
15 #include "opentelemetry/trace/span_context.h"
16 #include "opentelemetry/trace/span_context_kv_iterable.h"
17 #include "opentelemetry/version.h"
18 
20 namespace trace
21 {
22 // NOTE - code within `detail` namespace implements internal details, and not part
23 // of the public interface.
24 namespace detail
25 {
26 template <class T>
27 inline void take_span_context_kv(SpanContext, opentelemetry::common::KeyValueIterableView<T>)
28 {}
29 
30 template <class T, nostd::enable_if_t<common::detail::is_key_value_iterable<T>::value> * = nullptr>
32 {}
33 
36  std::initializer_list<std::pair<nostd::string_view, common::AttributeValue>>)
37 {}
38 
39 template <class T>
41  -> decltype(take_span_context_kv(std::begin(iterable)->first, std::begin(iterable)->second),
42  nostd::size(iterable),
43  std::true_type{});
44 
46 
47 template <class T>
49 {
50  static const bool value =
51  decltype(detail::is_span_context_kv_iterable_impl(std::declval<T>()))::value;
52 };
53 } // namespace detail
54 
55 template <class T>
57 {
59  "Must be a context/key-value iterable");
60 
61 public:
62  explicit SpanContextKeyValueIterableView(const T &links) noexcept : container_{&links} {}
63 
65  callback) const noexcept override
66  {
67  auto iter = std::begin(*container_);
68  auto last = std::end(*container_);
69  for (; iter != last; ++iter)
70  {
71  if (!this->do_callback(iter->first, iter->second, callback))
72  {
73  return false;
74  }
75  }
76  return true;
77  }
78 
79  size_t size() const noexcept override { return nostd::size(*container_); }
80 
81 private:
82  const T *container_;
83 
84  bool do_callback(SpanContext span_context,
85  const common::KeyValueIterable &attributes,
87  callback) const noexcept
88  {
89  if (!callback(span_context, attributes))
90  {
91  return false;
92  }
93  return true;
94  }
95 
96  template <class U,
98  bool do_callback(SpanContext span_context,
99  const U &attributes,
100  nostd::function_ref<bool(SpanContext, const common::KeyValueIterable &)>
101  callback) const noexcept
102  {
103  return do_callback(span_context, common::KeyValueIterableView<U>(attributes), callback);
104  }
105 
106  bool do_callback(
107  SpanContext span_context,
108  std::initializer_list<std::pair<nostd::string_view, common::AttributeValue>> attributes,
109  nostd::function_ref<bool(SpanContext, const common::KeyValueIterable &)> callback)
110  const noexcept
111  {
112  return do_callback(span_context,
113  nostd::span<const std::pair<nostd::string_view, common::AttributeValue>>{
114  attributes.begin(), attributes.end()},
115  callback);
116  }
117 };
118 } // namespace trace
half_float::detail::false_type
bool_type< false > false_type
Definition: includes/half.hpp:489
nostd::function_ref
Definition: includes/opentelemetry/nostd/function_ref.h:17
trace
Definition: includes/opentelemetry/context/context_value.h:18
trace::SpanContextKeyValueIterable
Supports internal iteration over a collection of SpanContext/key-value pairs.
Definition: includes/opentelemetry/trace/span_context_kv_iterable.h:18
trace::SpanContextKeyValueIterableView::ForEachKeyValue
bool ForEachKeyValue(nostd::function_ref< bool(SpanContext, const common::KeyValueIterable &)> callback) const noexcept override
Definition: includes/opentelemetry/trace/span_context_kv_iterable_view.h:64
trace::SpanContext
Definition: includes/opentelemetry/trace/span_context.h:24
trace::detail::is_span_context_kv_iterable
Definition: includes/opentelemetry/trace/span_context_kv_iterable_view.h:48
nostd::span::begin
T * begin() const noexcept
Definition: includes/opentelemetry/nostd/span.h:182
trace::detail::take_span_context_kv
void take_span_context_kv(SpanContext, opentelemetry::common::KeyValueIterableView< T >)
Definition: includes/opentelemetry/trace/span_context_kv_iterable_view.h:27
trace::detail::is_span_context_kv_iterable_impl
auto is_span_context_kv_iterable_impl(T iterable) -> decltype(take_span_context_kv(std::begin(iterable) ->first, std::begin(iterable) ->second), nostd::size(iterable), std::true_type
Definition: includes/opentelemetry/trace/span_context_kv_iterable_view.h:40
OPENTELEMETRY_BEGIN_NAMESPACE
#define OPENTELEMETRY_BEGIN_NAMESPACE
Definition: includes/opentelemetry/version.h:21
nostd::span
Back port of std::span.
Definition: includes/opentelemetry/nostd/span.h:51
trace::detail::is_span_context_kv_iterable::value
static const bool value
Definition: includes/opentelemetry/trace/span_context_kv_iterable_view.h:50
OPENTELEMETRY_END_NAMESPACE
#define OPENTELEMETRY_END_NAMESPACE
Definition: includes/opentelemetry/version.h:24
common::KeyValueIterable
Supports internal iteration over a collection of key-value pairs.
Definition: includes/opentelemetry/common/key_value_iterable.h:17
trace::SpanContextKeyValueIterableView
Definition: includes/opentelemetry/trace/span_context_kv_iterable_view.h:56
trace::SpanContextKeyValueIterableView::SpanContextKeyValueIterableView
SpanContextKeyValueIterableView(const T &links) noexcept
Definition: includes/opentelemetry/trace/span_context_kv_iterable_view.h:62
half_float::detail::true_type
bool_type< true > true_type
Definition: includes/half.hpp:488
nostd::size
auto size(const C &c) noexcept(noexcept(c.size())) -> decltype(c.size())
Back port of std::size.
Definition: includes/opentelemetry/nostd/utility.h:60
nostd::enable_if_t
typename std::enable_if< B, T >::type enable_if_t
Back port of std::enable_if_t.
Definition: includes/opentelemetry/nostd/type_traits.h:40
common::KeyValueIterableView
Container for key-value pairs that can transform every value in it to one of types listed in common::...
Definition: includes/opentelemetry/common/key_value_iterable_view.h:57
trace::SpanContextKeyValueIterableView::size
size_t size() const noexcept override
Definition: includes/opentelemetry/trace/span_context_kv_iterable_view.h:79
pydeepstreamdoc::osd::ArrowHeadDoc::end
constexpr const char * end
Definition: service-maker/sources/python/src/bindings/docstrings/osddoc.h:34