| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 | // Copyright The OpenTelemetry Authors// SPDX-License-Identifier: Apache-2.0#pragma once#include "opentelemetry/common/key_value_iterable.h"#include "opentelemetry/common/key_value_iterable_view.h"#include "opentelemetry/nostd/shared_ptr.h"#include "opentelemetry/nostd/string_view.h"#include "opentelemetry/version.h"OPENTELEMETRY_BEGIN_NAMESPACEnamespace trace{class Tracer;/** * Creates new Tracer instances. */class OPENTELEMETRY_EXPORT TracerProvider{public:  virtual ~TracerProvider() = default;#if OPENTELEMETRY_ABI_VERSION_NO >= 2  /**   * Gets or creates a named Tracer instance (ABI).   *   * @since ABI_VERSION 2   *   * @param[in] name Tracer instrumentation scope   * @param[in] version Instrumentation scope version   * @param[in] schema_url Instrumentation scope schema URL   * @param[in] attributes Instrumentation scope attributes (optional, may be nullptr)   */  virtual nostd::shared_ptr<Tracer> GetTracer(      nostd::string_view name,      nostd::string_view version,      nostd::string_view schema_url,      const common::KeyValueIterable *attributes) noexcept = 0;  /**   * Gets or creates a named Tracer instance (API helper).   *   * @since ABI_VERSION 2   *   * @param[in] name Tracer instrumentation scope   * @param[in] version Instrumentation scope version, optional   * @param[in] schema_url Instrumentation scope schema URL, optional   */  nostd::shared_ptr<Tracer> GetTracer(nostd::string_view name,                                      nostd::string_view version    = "",                                      nostd::string_view schema_url = "")  {    return GetTracer(name, version, schema_url, nullptr);  }  /**   * Gets or creates a named Tracer instance (API helper).   *   * @since ABI_VERSION 2   *   * @param[in] name Tracer instrumentation scope   * @param[in] version Instrumentation scope version   * @param[in] schema_url Instrumentation scope schema URL   * @param[in] attributes Instrumentation scope attributes   */  nostd::shared_ptr<Tracer> GetTracer(      nostd::string_view name,      nostd::string_view version,      nostd::string_view schema_url,      std::initializer_list<std::pair<nostd::string_view, common::AttributeValue>> attributes)  {    /* Build a container from std::initializer_list. */    nostd::span<const std::pair<nostd::string_view, common::AttributeValue>> attributes_span{        attributes.begin(), attributes.end()};    /* Build a view on the container. */    common::KeyValueIterableView<        nostd::span<const std::pair<nostd::string_view, common::AttributeValue>>>        iterable_attributes{attributes_span};    /* Add attributes using the view. */    return GetTracer(name, version, schema_url, &iterable_attributes);  }  /**   * Gets or creates a named Tracer instance (API helper).   *   * @since ABI_VERSION 2   *   * @param[in] name Tracer instrumentation scope   * @param[in] version Instrumentation scope version   * @param[in] schema_url Instrumentation scope schema URL   * @param[in] attributes Instrumentation scope attributes container   */  template <class T,            nostd::enable_if_t<common::detail::is_key_value_iterable<T>::value> * = nullptr>  nostd::shared_ptr<Tracer> GetTracer(nostd::string_view name,                                      nostd::string_view version,                                      nostd::string_view schema_url,                                      const T &attributes)  {    /* Build a view on the container. */    common::KeyValueIterableView<T> iterable_attributes(attributes);    /* Add attributes using the view. */    return GetTracer(name, version, schema_url, &iterable_attributes);  }#else  /**   * Gets or creates a named tracer instance.   *   * Optionally a version can be passed to create a named and versioned tracer   * instance.   */  virtual nostd::shared_ptr<Tracer> GetTracer(nostd::string_view name,                                              nostd::string_view version    = "",                                              nostd::string_view schema_url = "") noexcept = 0;#endif};}  // namespace traceOPENTELEMETRY_END_NAMESPACE
 |