Low-Level Abstraction of Memory Access
llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs > Struct Template Reference

#include <Split.hpp>

Public Types

using ArrayExtents = TArrayExtents
 
using ArrayIndex = typename ArrayExtents::Index
 
using RecordDim = TRecordDim
 
using SelectorForMapping1 = TSelectorForMapping1
 
using NormalizedSelectorForMapping1 = typename internal::ReplaceTagListsByCoords< RecordDim, SelectorForMapping1 >::type
 
using RecordDimPartitions = decltype(internal::partitionRecordDim(RecordDim{}, NormalizedSelectorForMapping1{}))
 
using RecordDim1 = mp_first< RecordDimPartitions >
 
using RecordDim2 = mp_second< RecordDimPartitions >
 
using Mapping1 = MappingTemplate1< ArrayExtents, RecordDim1 >
 
using Mapping2 = MappingTemplate2< ArrayExtents, RecordDim2 >
 

Public Member Functions

constexpr Split ()=default
 
constexpr Split (ArrayExtents extents)
 
constexpr Split (Mapping1 mapping1, Mapping2 mapping2)
 
template<typename... Args1, typename... Args2>
constexpr Split (std::tuple< Args1... > mappingArgs1, std::tuple< Args2... > mappingArgs2)
 
constexpr auto extents () const -> ArrayExtents
 
constexpr auto blobSize ([[maybe_unused]] size_type i) const -> size_type
 
template<std::size_t... RecordCoords>
constexpr auto blobNrAndOffset (ArrayIndex ai, RecordCoord< RecordCoords... >={}) const -> NrAndOffset< size_type >
 
template<std::size_t... RecordCoords, typename Blobs >
constexpr auto compute (ArrayIndex ai, RecordCoord< RecordCoords... >, Blobs &blobs) const
 

Static Public Member Functions

template<std::size_t... RecordCoords>
static constexpr auto isComputed (RecordCoord< RecordCoords... >) -> bool
 

Public Attributes

Mapping1 mapping1
 
Mapping2 mapping2
 

Static Public Attributes

static constexpr std::size_t blobCount = SeparateBlobs ? Mapping1::blobCount + Mapping2::blobCount : 1
 

Detailed Description

template<typename TArrayExtents, typename TRecordDim, typename TSelectorForMapping1, template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
struct llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >

Mapping which splits off a part of the record dimension and maps it differently then the rest.

Template Parameters
TSelectorForMapping1Selects a part of the record dimension to be mapped by MappingTemplate1. Can be a RecordCoord, a type list of RecordCoords, a type list of tags (selecting one field), or a type list of type list of tags (selecting one field per sub list). dimension to be mapped differently.
MappingTemplate1The mapping used for the selected part of the record dimension.
MappingTemplate2The mapping used for the not selected part of the record dimension.
SeparateBlobsIf true, both pieces of the record dimension are mapped to separate blobs.

Definition at line 107 of file Split.hpp.

Member Typedef Documentation

◆ ArrayExtents

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
using llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::ArrayExtents = TArrayExtents

Definition at line 111 of file Split.hpp.

◆ ArrayIndex

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
using llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::ArrayIndex = typename ArrayExtents::Index

Definition at line 112 of file Split.hpp.

◆ Mapping1

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
using llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::Mapping1 = MappingTemplate1<ArrayExtents, RecordDim1>

Definition at line 123 of file Split.hpp.

◆ Mapping2

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
using llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::Mapping2 = MappingTemplate2<ArrayExtents, RecordDim2>

Definition at line 124 of file Split.hpp.

◆ NormalizedSelectorForMapping1

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
using llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::NormalizedSelectorForMapping1 = typename internal::ReplaceTagListsByCoords<RecordDim, SelectorForMapping1>::type

Definition at line 116 of file Split.hpp.

◆ RecordDim

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
using llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::RecordDim = TRecordDim

Definition at line 113 of file Split.hpp.

◆ RecordDim1

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
using llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::RecordDim1 = mp_first<RecordDimPartitions>

Definition at line 120 of file Split.hpp.

◆ RecordDim2

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
using llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::RecordDim2 = mp_second<RecordDimPartitions>

Definition at line 121 of file Split.hpp.

◆ RecordDimPartitions

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
using llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::RecordDimPartitions = decltype(internal::partitionRecordDim(RecordDim{}, NormalizedSelectorForMapping1{}))

Definition at line 118 of file Split.hpp.

◆ SelectorForMapping1

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
using llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::SelectorForMapping1 = TSelectorForMapping1

Definition at line 115 of file Split.hpp.

Constructor & Destructor Documentation

◆ Split() [1/4]

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
constexpr llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::Split ( )
constexprdefault

◆ Split() [2/4]

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
constexpr llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::Split ( ArrayExtents  extents)
inlineexplicitconstexpr

Definition at line 138 of file Split.hpp.

◆ Split() [3/4]

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
constexpr llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::Split ( Mapping1  mapping1,
Mapping2  mapping2 
)
inlineconstexpr

Definition at line 143 of file Split.hpp.

◆ Split() [4/4]

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
template<typename... Args1, typename... Args2>
constexpr llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::Split ( std::tuple< Args1... >  mappingArgs1,
std::tuple< Args2... >  mappingArgs2 
)
inlineconstexpr

Definition at line 150 of file Split.hpp.

Member Function Documentation

◆ blobNrAndOffset()

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
template<std::size_t... RecordCoords>
constexpr auto llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::blobNrAndOffset ( ArrayIndex  ai,
RecordCoord< RecordCoords... >  = {} 
) const -> NrAndOffset<size_type>
inlineconstexpr

Definition at line 174 of file Split.hpp.

◆ blobSize()

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
constexpr auto llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::blobSize ( [[maybe_unused] ] size_type  i) const -> size_type
inlineconstexpr

Definition at line 161 of file Split.hpp.

◆ compute()

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
template<std::size_t... RecordCoords, typename Blobs >
constexpr auto llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::compute ( ArrayIndex  ai,
RecordCoord< RecordCoords... >  ,
Blobs blobs 
) const
inlineconstexpr

Definition at line 206 of file Split.hpp.

◆ extents()

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
constexpr auto llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::extents ( ) const -> ArrayExtents
inlineconstexpr

Definition at line 156 of file Split.hpp.

◆ isComputed()

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
template<std::size_t... RecordCoords>
static constexpr auto llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::isComputed ( RecordCoord< RecordCoords... >  ) -> bool
inlinestaticconstexpr

Definition at line 196 of file Split.hpp.

Member Data Documentation

◆ blobCount

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
constexpr std::size_t llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::blobCount = SeparateBlobs ? Mapping1::blobCount + Mapping2::blobCount : 1
staticconstexpr

Definition at line 126 of file Split.hpp.

◆ mapping1

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
Mapping1 llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::mapping1

Definition at line 220 of file Split.hpp.

◆ mapping2

template<typename TArrayExtents , typename TRecordDim , typename TSelectorForMapping1 , template< typename... > typename MappingTemplate1, template< typename... > typename MappingTemplate2, bool SeparateBlobs = false>
Mapping2 llama::mapping::Split< TArrayExtents, TRecordDim, TSelectorForMapping1, MappingTemplate1, MappingTemplate2, SeparateBlobs >::mapping2

Definition at line 221 of file Split.hpp.


The documentation for this struct was generated from the following file: