.. _program_listing_file_include_opentelemetry_context_propagation_composite_propagator.h: Program Listing for File composite_propagator.h =============================================== |exhale_lsh| :ref:`Return to documentation for file ` (``include/opentelemetry/context/propagation/composite_propagator.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 #include #include #include #include "opentelemetry/context/propagation/text_map_propagator.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace context { namespace propagation { class CompositePropagator : public TextMapPropagator { public: CompositePropagator(std::vector> propagators) : propagators_(std::move(propagators)) {} void Inject(TextMapCarrier &carrier, const context::Context &context) noexcept override { for (auto &p : propagators_) { p->Inject(carrier, context); } } context::Context Extract(const TextMapCarrier &carrier, context::Context &context) noexcept override { auto first = true; context::Context tmp_context; for (auto &p : propagators_) { if (first) { tmp_context = p->Extract(carrier, context); first = false; } else { tmp_context = p->Extract(carrier, tmp_context); } } return propagators_.size() ? tmp_context : context; } private: std::vector> propagators_; }; } // namespace propagation } // namespace context OPENTELEMETRY_END_NAMESPACE;