11#ifndef O2_FRAMEWORK_INPUTSPAN_H_
12#define O2_FRAMEWORK_INPUTSPAN_H_
16#include <fairmq/FwdDecls.h>
39 InputSpan(std::function<
size_t(
size_t)> nofPartsGetter,
40 std::function<
int(
size_t)> refCountGetter,
43 std::function<fair::mq::Message*(
size_t,
DataRefIndices)> payloadGetter,
50 for (
size_t p = 0; p < partidx; ++p) {
51 idx = mNextIndicesGetter(
i, idx);
53 return mIndicesGetter(
i, idx);
59 return mIndicesGetter(slotIdx,
indices);
65 return mPayloadGetter(slotIdx,
indices);
71 return mNextIndicesGetter(slotIdx, current);
86 return mNofPartsGetter(
i);
95 if (!mRefCountGetter) {
98 return mRefCountGetter(
i);
102 [[nodiscard]]
size_t size()
const
107 [[nodiscard]]
const char*
header(
size_t i)
const
109 return get(
i).header;
114 return get(
i).payload;
119 template <
typename ParentT,
typename T>
136 mCurrentIndices(isEnd ? parent->endIndices() : parent->initialIndices()),
139 if (mCurrentIndices != mParent->endIndices()) {
140 mElement = mParent->getAtIndices(mCurrentIndices);
147 mCurrentIndices = mParent->nextIndices(mCurrentIndices);
148 if (mCurrentIndices != mParent->endIndices()) {
149 mElement = mParent->getAtIndices(mCurrentIndices);
171 return mCurrentIndices == rh.mCurrentIndices;
176 return mCurrentIndices <=> rh.mCurrentIndices;
188 return mCurrentIndices.headerIdx;
194 return mCurrentIndices;
200 requires requires(
ParentType const* p,
size_t i) { p->parts(
i); }
202 return mParent->parts(mCurrentIndices.headerIdx);
206 ParentType
const* mParent;
208 ElementType mElement;
236 return {
this,
false};
245 std::function<size_t(
size_t)> mNofPartsGetter;
246 std::function<
int(
size_t)> mRefCountGetter;
249 std::function<fair::mq::Message*(size_t,
DataRefIndices)> mPayloadGetter;
GLsizei GLenum const void * indices
Defining ITS Vertex explicitly as messageable.