16#ifndef O2_POLYACCESSOR_H
17#define O2_POLYACCESSOR_H
33template <
typename T,
int N>
41 mSizeOfs[
src] =
sizeof(
typename std::remove_reference<
decltype(cont)>::type::value_type);
42 mSizes[
src] = cont.size();
43 mContainerPtr[
src] =
reinterpret_cast<const char*
>(cont.data());
48 return mSizeOfs[
src] != 0;
55 return *
reinterpret_cast<const U*
>(getPtr(
src, idx));
59 template <
typename U,
typename I>
60 const U&
get_as(
const I globIdx)
const
62 return get_as<U>(globIdx.getSource(), globIdx.getIndex());
68 return get_as<T>(
src, idx);
73 const T&
get(
const I globIdx)
const
75 return get_as<T>(globIdx.getSource(), globIdx.getIndex());
82 return getSize(
src) ? gsl::span<const U>(
reinterpret_cast<const U*
>(getPtr(
src, 0)),
getSize(
src)) : gsl::span<const U>();
91 auto getPtr(
int src,
int idx)
const {
return mContainerPtr[
src] + mSizeOfs[
src] * idx; }
93 std::array<size_t, N> mSizeOfs{};
94 std::array<size_t, N> mSizes{};
95 std::array<const char*, N> mContainerPtr{};
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...