.. _program_listing_file_include_opentelemetry_trace_propagation_composite_propagator.h: Program Listing for File composite_propagator.h =============================================== |exhale_lsh| :ref:`Return to documentation for file ` (``include/opentelemetry/trace/propagation/composite_propagator.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #include #include #include #include "opentelemetry/trace/propagation/text_map_propagator.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace trace { 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 trace OPENTELEMETRY_END_NAMESPACE;