6 #include "../ProxyRefOpMixin.hpp"
16 template<
typename RecordDim>
23 template<
typename TArrayExtents,
typename TRecordDim,
template<
typename,
typename>
typename InnerMapping>
24 struct Bytesplit :
private InnerMapping<TArrayExtents, internal::SplitBytes<TRecordDim>>
26 using Inner = InnerMapping<TArrayExtents, internal::SplitBytes<TRecordDim>>;
30 using Inner::blobCount;
32 using Inner::blobSize;
36 using ArrayIndex =
typename TArrayExtents::Index;
40 constexpr
explicit Bytesplit(TArrayExtents extents, TRecordDim = {}) :
Inner(extents)
44 template<
typename... Args>
46 :
Inner(std::make_from_tuple<Inner>(innerMappingArgs))
50 template<std::size_t... RecordCoords>
56 template<
typename RC,
typename BlobArray>
89 BlobArray& blobs = this->blobs;
93 auto* p =
reinterpret_cast<std::byte*
>(&v);
97 constexpr
auto i = decltype(ic)::value;
109 BlobArray& blobs = this->blobs;
112 auto* p =
reinterpret_cast<std::byte*
>(&v);
116 constexpr
auto i = decltype(ic)::value;
125 template<std::size_t... RecordCoords,
typename BlobArray>
136 template<
template<
typename,
typename>
typename InnerMapping>
139 template<
typename ArrayExtents,
typename RecordDim>
144 template<
typename Mapping>
148 template<
typename TArrayExtents,
typename TRecordDim,
template<
typename,
typename>
typename InnerMapping>
149 inline constexpr
bool isBytesplit<Bytesplit<TArrayExtents, TRecordDim, InnerMapping>> =
true;
#define LLAMA_LAMBDA_INLINE
Gives strong indication to the compiler to inline the attributed lambda.
#define LLAMA_FN_HOST_ACC_INLINE
TransformLeaves< RecordDim, ReplaceByByteArray > SplitBytes
std::byte[sizeof(T)] ReplaceByByteArray
constexpr bool isBytesplit
ArrayExtents(Args...) -> ArrayExtents< typename internal::IndexTypeFromArgs< std::size_t, Args... >::type,(Args{}, dyn)... >
constexpr void mp_for_each_inline(F &&f)
Like boost::mp11::mp_for_each, but marked with LLAMA_FN_HOST_ACC_INLINE.
TransformLeavesWithCoord< RecordDim, internal::MakePassSecond< FieldTypeFunctor >::template fn > TransformLeaves
RecordCoordFromList< mp_append< typename RecordCoords::List... > > Cat
Concatenate a set of RecordCoords.
typename internal::GetTypeImpl< RecordDim, RecordCoordOrTags... >::type GetType
auto mapToMemory(Mapping &mapping, typename Mapping::ArrayExtents::Index ai, RecordCoord rc, Blobs &blobs) -> decltype(auto)
CRTP mixin for proxy reference types to support all compound assignment and increment/decrement opera...
Reference(const Reference &)=default
constexpr auto operator=(const Reference &other) -> Reference &
constexpr Reference(const Inner &innerMapping, ArrayIndex ai, BlobArray &blobs)
constexpr auto operator=(value_type v) -> Reference &
GetType< TRecordDim, RC > value_type
static constexpr auto isComputed(RecordCoord< RecordCoords... >)
constexpr Bytesplit(std::tuple< Args... > innerMappingArgs, TRecordDim={})
typename Inner::ArrayExtents ArrayExtents
constexpr Bytesplit(TArrayExtents extents, TRecordDim={})
constexpr auto compute(ArrayIndex ai, RecordCoord< RecordCoords... >, BlobArray &blobs) const
InnerMapping< TArrayExtents, internal::SplitBytes< TRecordDim > > Inner