11 #include "opentelemetry/sdk/trace/multi_recordable.h"
12 #include "opentelemetry/sdk/trace/processor.h"
13 #include "opentelemetry/version.h"
35 : head_(nullptr), tail_(nullptr), count_(0)
37 for (
auto &processor : processors)
48 ProcessorNode *pNode =
new ProcessorNode(
std::move(processor), tail_);
56 head_ = tail_ = pNode;
65 auto multi_recordable =
static_cast<MultiRecordable *
>(recordable.get());
66 ProcessorNode *node = head_;
67 while (node !=
nullptr)
69 auto processor = node->value_.get();
70 multi_recordable->AddRecordable(*processor, processor->MakeRecordable());
77 const opentelemetry::trace::SpanContext &parent_context) noexcept
override
80 ProcessorNode *node = head_;
81 while (node !=
nullptr)
83 auto processor = node->value_.get();
84 auto &recordable = multi_recordable->GetRecordable(*processor);
85 if (recordable !=
nullptr)
87 processor->OnStart(*recordable, parent_context);
93 virtual void OnEnd(std::unique_ptr<Recordable> &&span) noexcept
override
96 ProcessorNode *node = head_;
97 while (node !=
nullptr)
99 auto processor = node->value_.get();
100 auto recordable = multi_recordable->ReleaseRecordable(*processor);
101 if (recordable !=
nullptr)
107 delete multi_recordable;
114 ProcessorNode *node = head_;
115 while (node !=
nullptr)
117 auto processor = node->value_.get();
118 result |= processor->ForceFlush(timeout);
141 ProcessorNode *node = head_;
142 while (node !=
nullptr)
144 auto processor = node->value_.get();
145 result |= processor->Shutdown(timeout);
154 std::unique_ptr<SpanProcessor> value_;
155 ProcessorNode *next_, *prev_;
156 ProcessorNode(std::unique_ptr<SpanProcessor> &&value,
157 ProcessorNode *prev =
nullptr,
158 ProcessorNode *next =
nullptr)
159 : value_(
std::
move(value)), next_(next), prev_(prev)
167 ProcessorNode *node = tail_;
168 while (node !=
nullptr)
170 if (node->next_ !=
nullptr)
173 node->next_ =
nullptr;
175 if (node->prev_ !=
nullptr)
185 head_ = tail_ =
nullptr;
190 ProcessorNode *head_, *tail_;