16#ifndef ALPAKA_BLOCK_SHARED_DYN_MEMBER_ALLOC_KIB
17# define ALPAKA_BLOCK_SHARED_DYN_MEMBER_ALLOC_KIB 64u
25 template<std::
size_t TMinDataAlignBytes>
85 std::uint32_t off = 0;
91 std::uint32_t
const alignedMetaDataOffset
94 (alignedMetaDataOffset +
static_cast<std::uint32_t
>(
sizeof(MetaData))) <=
m_allocdBytes);
95 auto* metaDataPtr =
reinterpret_cast<MetaData*
>(
data() + alignedMetaDataOffset);
96 off = metaDataPtr->offset;
98 if(metaDataPtr->id ==
id)
99 return reinterpret_cast<T*
>(&
data()[off -
sizeof(T)]);
130 auto varChunkEnd(uint32_t byteOffset, uint32_t numBytes)
const -> std::uint32_t
132 auto const ptr =
reinterpret_cast<std::size_t
>(
data() + byteOffset);
133 constexpr size_t align = std::max(TMinDataAlignBytes,
alignof(T));
134 std::size_t
const newPtrAdress = ((ptr + align - 1u) / align) * align + numBytes;
135 return static_cast<uint32_t
>(newPtrAdress -
reinterpret_cast<std::size_t
>(
data()));
143 mutable std::array<uint8_t, totalSharedBytes>
m_data;
#define ALPAKA_ASSERT_ACC(...)
ALPAKA_ASSERT_ACC is an assert-like macro.
#define ALPAKA_BLOCK_SHARED_DYN_MEMBER_ALLOC_KIB
auto getLatestVarPtr() const -> T *
void allocDynamic(size_t id, uint32_t numBytes) const
static constexpr std::uint32_t metaDataSize
void alloc(size_t id) const
std::uint32_t m_allocdBytes
std::array< uint8_t, totalSharedBytes > m_data
auto varChunkEnd(uint32_t byteOffset, uint32_t numBytes) const -> std::uint32_t
auto getVarPtr(size_t id) const -> T *
Give the pointer to an exiting variable.
static constexpr std::uint32_t totalSharedBytes