Low-Level Abstraction of Memory Access
llama::RecordRef< TView, TBoundRecordCoord, OwnView > Struct Template Reference

#include <RecordRef.hpp>

+ Inheritance diagram for llama::RecordRef< TView, TBoundRecordCoord, OwnView >:
+ Collaboration diagram for llama::RecordRef< TView, TBoundRecordCoord, OwnView >:

Classes

struct  Loader
 
struct  LoaderConst
 

Public Types

using View = TView
 View this record reference points into. More...
 
using BoundRecordCoord = TBoundRecordCoord
 Record coords into View::RecordDim which are already bound by this RecordRef. More...
 
using AccessibleRecordDim = GetType< RecordDim, BoundRecordCoord >
 

Public Member Functions

 RecordRef ()
 Creates an empty RecordRef. Only available for if the view is owned. Used by llama::One. More...
 
 RecordRef (ArrayIndex ai, std::conditional_t< OwnView, View &&, View & > view)
 
 RecordRef (const RecordRef &)=default
 
auto operator= (const RecordRef &other) -> RecordRef &
 
 RecordRef (RecordRef &&) noexcept=default
 
auto operator= (RecordRef &&) noexcept -> RecordRef &=default
 
 ~RecordRef ()=default
 
constexpr auto arrayIndex () const -> ArrayIndex
 
template<typename OtherView , typename OtherBoundRecordCoord , bool OtherOwnView>
 RecordRef (const RecordRef< OtherView, OtherBoundRecordCoord, OtherOwnView > &recordRef)
 
template<typename T , typename = std::enable_if_t<!isRecordRef<T>>>
 RecordRef (const T &scalar)
 Create a RecordRef from a scalar. Only available for if the view is owned. Used by llama::One. More...
 
template<std::size_t... Coord>
auto operator() (RecordCoord< Coord... >) const -> decltype(auto)
 
template<std::size_t... Coord>
auto operator() (RecordCoord< Coord... >) -> decltype(auto)
 
template<typename... Tags>
auto operator() (Tags...) const -> decltype(auto)
 
template<typename... Tags>
auto operator() (Tags...) -> decltype(auto)
 
template<typename T >
auto operator= (const T &other) -> RecordRef &
 
template<typename T >
auto operator+= (const T &other) -> RecordRef &
 
template<typename T >
auto operator-= (const T &other) -> RecordRef &
 
template<typename T >
auto operator*= (const T &other) -> RecordRef &
 
template<typename T >
auto operator/= (const T &other) -> RecordRef &
 
template<typename T >
auto operator%= (const T &other) -> RecordRef &
 
auto asTuple ()
 
auto asTuple () const
 
auto asFlatTuple ()
 
auto asFlatTuple () const
 
template<std::size_t I>
auto get () -> decltype(auto)
 
template<std::size_t I>
auto get () const -> decltype(auto)
 
template<typename TupleLike >
auto loadAs () -> TupleLike
 
template<typename TupleLike >
auto loadAs () const -> TupleLike
 
auto load () -> Loader
 
auto load () const -> LoaderConst
 
template<typename TupleLike >
void store (const TupleLike &t)
 

Friends

template<typename T >
auto operator+ (const RecordRef &vd, const T &t)
 
template<typename T , typename = std::enable_if_t<!isRecordRef<T>>>
auto operator+ (const T &t, const RecordRef &vd)
 
template<typename T >
auto operator- (const RecordRef &vd, const T &t)
 
template<typename T >
auto operator* (const RecordRef &vd, const T &t)
 
template<typename T , typename = std::enable_if_t<!isRecordRef<T>>>
auto operator* (const T &t, const RecordRef &vd)
 
template<typename T >
auto operator/ (const RecordRef &vd, const T &t)
 
template<typename T >
auto operator% (const RecordRef &vd, const T &t)
 
template<typename T >
auto operator== (const RecordRef &vd, const T &t) -> bool
 
template<typename T , typename = std::enable_if_t<!isRecordRef<T>>>
auto operator== (const T &t, const RecordRef &vd) -> bool
 
template<typename T >
auto operator!= (const RecordRef &vd, const T &t) -> bool
 
template<typename T , typename = std::enable_if_t<!isRecordRef<T>>>
auto operator!= (const T &t, const RecordRef &vd) -> bool
 
template<typename T >
auto operator< (const RecordRef &vd, const T &t) -> bool
 
template<typename T , typename = std::enable_if_t<!isRecordRef<T>>>
auto operator< (const T &t, const RecordRef &vd) -> bool
 
template<typename T >
auto operator<= (const RecordRef &vd, const T &t) -> bool
 
template<typename T , typename = std::enable_if_t<!isRecordRef<T>>>
auto operator<= (const T &t, const RecordRef &vd) -> bool
 
template<typename T >
auto operator> (const RecordRef &vd, const T &t) -> bool
 
template<typename T , typename = std::enable_if_t<!isRecordRef<T>>>
auto operator> (const T &t, const RecordRef &vd) -> bool
 
template<typename T >
auto operator>= (const RecordRef &vd, const T &t) -> bool
 
template<typename T , typename = std::enable_if_t<!isRecordRef<T>>>
auto operator>= (const T &t, const RecordRef &vd) -> bool
 
void swap (std::conditional_t< OwnView, RecordRef &, RecordRef > a, std::conditional_t< OwnView, RecordRef &, RecordRef > b) noexcept
 
template<typename T , typename Simd , typename SrcRC , typename DstRC >
void internal::loadSimdFromField (const T &srcRef, Simd &dstSimd, SrcRC srcRC, DstRC dstRC)
 
template<typename Simd , typename TFwd , typename SrcRC , typename DstRC >
void internal::storeSimdToField (const Simd &srcSimd, TFwd &&dstRef, SrcRC srcRC, DstRC dstRC)
 

Detailed Description

template<typename TView, typename TBoundRecordCoord, bool OwnView>
struct llama::RecordRef< TView, TBoundRecordCoord, OwnView >

Record reference type returned by View after resolving an array dimensions coordinate or partially resolving a RecordCoord. A record reference does not hold data itself, it just binds enough information (array dimensions coord and partial record coord) to retrieve it later from a View. Records references should not be created by the user. They are returned from various access functions in View and RecordRef itself.

Definition at line 345 of file RecordRef.hpp.

Member Typedef Documentation

◆ AccessibleRecordDim

template<typename TView , typename TBoundRecordCoord , bool OwnView>
using llama::RecordRef< TView, TBoundRecordCoord, OwnView >::AccessibleRecordDim = GetType<RecordDim, BoundRecordCoord>

Subtree of the record dimension of View starting at BoundRecordCoord. If BoundRecordCoord is RecordCoord<> (default) AccessibleRecordDim is the same as Mapping::RecordDim.

Definition at line 360 of file RecordRef.hpp.

◆ BoundRecordCoord

template<typename TView , typename TBoundRecordCoord , bool OwnView>
using llama::RecordRef< TView, TBoundRecordCoord, OwnView >::BoundRecordCoord = TBoundRecordCoord

Record coords into View::RecordDim which are already bound by this RecordRef.

Definition at line 348 of file RecordRef.hpp.

◆ View

template<typename TView , typename TBoundRecordCoord , bool OwnView>
using llama::RecordRef< TView, TBoundRecordCoord, OwnView >::View = TView

View this record reference points into.

Definition at line 347 of file RecordRef.hpp.

Constructor & Destructor Documentation

◆ RecordRef() [1/6]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
llama::RecordRef< TView, TBoundRecordCoord, OwnView >::RecordRef ( )
inline

Creates an empty RecordRef. Only available for if the view is owned. Used by llama::One.

Definition at line 363 of file RecordRef.hpp.

◆ RecordRef() [2/6]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
llama::RecordRef< TView, TBoundRecordCoord, OwnView >::RecordRef ( ArrayIndex  ai,
std::conditional_t< OwnView, View &&, View & >  view 
)
inline

Definition at line 372 of file RecordRef.hpp.

◆ RecordRef() [3/6]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
llama::RecordRef< TView, TBoundRecordCoord, OwnView >::RecordRef ( const RecordRef< TView, TBoundRecordCoord, OwnView > &  )
default

◆ RecordRef() [4/6]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
llama::RecordRef< TView, TBoundRecordCoord, OwnView >::RecordRef ( RecordRef< TView, TBoundRecordCoord, OwnView > &&  )
defaultnoexcept

◆ ~RecordRef()

template<typename TView , typename TBoundRecordCoord , bool OwnView>
llama::RecordRef< TView, TBoundRecordCoord, OwnView >::~RecordRef ( )
default

◆ RecordRef() [5/6]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename OtherView , typename OtherBoundRecordCoord , bool OtherOwnView>
llama::RecordRef< TView, TBoundRecordCoord, OwnView >::RecordRef ( const RecordRef< OtherView, OtherBoundRecordCoord, OtherOwnView > &  recordRef)
inline

Create a RecordRef from a different RecordRef. Only available for if the view is owned. Used by llama::One.

Definition at line 401 of file RecordRef.hpp.

◆ RecordRef() [6/6]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T , typename = std::enable_if_t<!isRecordRef<T>>>
llama::RecordRef< TView, TBoundRecordCoord, OwnView >::RecordRef ( const T &  scalar)
inlineexplicit

Create a RecordRef from a scalar. Only available for if the view is owned. Used by llama::One.

Definition at line 416 of file RecordRef.hpp.

Member Function Documentation

◆ arrayIndex()

template<typename TView , typename TBoundRecordCoord , bool OwnView>
constexpr auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::arrayIndex ( ) const -> ArrayIndex
inlineconstexpr

Definition at line 392 of file RecordRef.hpp.

◆ asFlatTuple() [1/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::asFlatTuple ( )
inline

Definition at line 650 of file RecordRef.hpp.

◆ asFlatTuple() [2/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::asFlatTuple ( ) const
inline

Definition at line 655 of file RecordRef.hpp.

◆ asTuple() [1/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::asTuple ( )
inline

Definition at line 640 of file RecordRef.hpp.

◆ asTuple() [2/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::asTuple ( ) const
inline

Definition at line 645 of file RecordRef.hpp.

◆ get() [1/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<std::size_t I>
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::get ( ) -> decltype(auto)
inline

Definition at line 661 of file RecordRef.hpp.

◆ get() [2/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<std::size_t I>
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::get ( ) const -> decltype(auto)
inline

Definition at line 667 of file RecordRef.hpp.

◆ load() [1/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::load ( ) -> Loader
inline

Definition at line 722 of file RecordRef.hpp.

◆ load() [2/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::load ( ) const -> LoaderConst
inline

Definition at line 727 of file RecordRef.hpp.

◆ loadAs() [1/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename TupleLike >
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::loadAs ( ) -> TupleLike
inline

Definition at line 673 of file RecordRef.hpp.

◆ loadAs() [2/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename TupleLike >
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::loadAs ( ) const -> TupleLike
inline

Definition at line 686 of file RecordRef.hpp.

◆ operator%=()

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T >
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::operator%= ( const T &  other) -> RecordRef&
inline

Definition at line 521 of file RecordRef.hpp.

◆ operator()() [1/4]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<std::size_t... Coord>
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::operator() ( RecordCoord< Coord... >  ) -> decltype(auto)
inline

Definition at line 442 of file RecordRef.hpp.

◆ operator()() [2/4]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<std::size_t... Coord>
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::operator() ( RecordCoord< Coord... >  ) const -> decltype(auto)
inline

Access a record in the record dimension underneath the current record reference using a RecordCoord. If the access resolves to a leaf, an l-value reference to a variable inside the View storage is returned, otherwise another RecordRef.

Definition at line 430 of file RecordRef.hpp.

◆ operator()() [3/4]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename... Tags>
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::operator() ( Tags...  ) -> decltype(auto)
inline

Definition at line 464 of file RecordRef.hpp.

◆ operator()() [4/4]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename... Tags>
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::operator() ( Tags...  ) const -> decltype(auto)
inline

Access a record in the record dimension underneath the current record reference using a series of tags. If the access resolves to a leaf, an l-value reference to a variable inside the View storage is returned, otherwise another RecordRef.

Definition at line 456 of file RecordRef.hpp.

◆ operator*=()

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T >
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::operator*= ( const T &  other) -> RecordRef&
inline

Definition at line 509 of file RecordRef.hpp.

◆ operator+=()

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T >
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::operator+= ( const T &  other) -> RecordRef&
inline

Definition at line 497 of file RecordRef.hpp.

◆ operator-=()

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T >
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::operator-= ( const T &  other) -> RecordRef&
inline

Definition at line 503 of file RecordRef.hpp.

◆ operator/=()

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T >
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::operator/= ( const T &  other) -> RecordRef&
inline

Definition at line 515 of file RecordRef.hpp.

◆ operator=() [1/3]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::operator= ( const RecordRef< TView, TBoundRecordCoord, OwnView > &  other) -> RecordRef&
inline

Definition at line 381 of file RecordRef.hpp.

◆ operator=() [2/3]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T >
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::operator= ( const T &  other) -> RecordRef&
inline

Definition at line 490 of file RecordRef.hpp.

◆ operator=() [3/3]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
auto llama::RecordRef< TView, TBoundRecordCoord, OwnView >::operator= ( RecordRef< TView, TBoundRecordCoord, OwnView > &&  ) -> RecordRef &=default
defaultnoexcept

◆ store()

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename TupleLike >
void llama::RecordRef< TView, TBoundRecordCoord, OwnView >::store ( const TupleLike &  t)
inline

Definition at line 733 of file RecordRef.hpp.

Friends And Related Function Documentation

◆ internal::loadSimdFromField

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T , typename Simd , typename SrcRC , typename DstRC >
void internal::loadSimdFromField ( const T &  srcRef,
Simd dstSimd,
SrcRC  srcRC,
DstRC  dstRC 
)
friend

◆ internal::storeSimdToField

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename Simd , typename TFwd , typename SrcRC , typename DstRC >
void internal::storeSimdToField ( const Simd srcSimd,
TFwd &&  dstRef,
SrcRC  srcRC,
DstRC  dstRC 
)
friend

◆ operator!= [1/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T >
auto operator!= ( const RecordRef< TView, TBoundRecordCoord, OwnView > &  vd,
const T &  t 
) -> bool
friend

Definition at line 581 of file RecordRef.hpp.

◆ operator!= [2/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T , typename = std::enable_if_t<!isRecordRef<T>>>
auto operator!= ( const T &  t,
const RecordRef< TView, TBoundRecordCoord, OwnView > &  vd 
) -> bool
friend

Definition at line 587 of file RecordRef.hpp.

◆ operator%

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T >
auto operator% ( const RecordRef< TView, TBoundRecordCoord, OwnView > &  vd,
const T &  t 
)
friend

Definition at line 563 of file RecordRef.hpp.

◆ operator* [1/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T >
auto operator* ( const RecordRef< TView, TBoundRecordCoord, OwnView > &  vd,
const T &  t 
)
friend

Definition at line 545 of file RecordRef.hpp.

◆ operator* [2/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T , typename = std::enable_if_t<!isRecordRef<T>>>
auto operator* ( const T &  t,
const RecordRef< TView, TBoundRecordCoord, OwnView > &  vd 
)
friend

Definition at line 551 of file RecordRef.hpp.

◆ operator+ [1/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T >
auto operator+ ( const RecordRef< TView, TBoundRecordCoord, OwnView > &  vd,
const T &  t 
)
friend

Definition at line 527 of file RecordRef.hpp.

◆ operator+ [2/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T , typename = std::enable_if_t<!isRecordRef<T>>>
auto operator+ ( const T &  t,
const RecordRef< TView, TBoundRecordCoord, OwnView > &  vd 
)
friend

Definition at line 533 of file RecordRef.hpp.

◆ operator-

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T >
auto operator- ( const RecordRef< TView, TBoundRecordCoord, OwnView > &  vd,
const T &  t 
)
friend

Definition at line 539 of file RecordRef.hpp.

◆ operator/

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T >
auto operator/ ( const RecordRef< TView, TBoundRecordCoord, OwnView > &  vd,
const T &  t 
)
friend

Definition at line 557 of file RecordRef.hpp.

◆ operator< [1/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T >
auto operator< ( const RecordRef< TView, TBoundRecordCoord, OwnView > &  vd,
const T &  t 
) -> bool
friend

Definition at line 593 of file RecordRef.hpp.

◆ operator< [2/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T , typename = std::enable_if_t<!isRecordRef<T>>>
auto operator< ( const T &  t,
const RecordRef< TView, TBoundRecordCoord, OwnView > &  vd 
) -> bool
friend

Definition at line 599 of file RecordRef.hpp.

◆ operator<= [1/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T >
auto operator<= ( const RecordRef< TView, TBoundRecordCoord, OwnView > &  vd,
const T &  t 
) -> bool
friend

Definition at line 605 of file RecordRef.hpp.

◆ operator<= [2/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T , typename = std::enable_if_t<!isRecordRef<T>>>
auto operator<= ( const T &  t,
const RecordRef< TView, TBoundRecordCoord, OwnView > &  vd 
) -> bool
friend

Definition at line 611 of file RecordRef.hpp.

◆ operator== [1/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T >
auto operator== ( const RecordRef< TView, TBoundRecordCoord, OwnView > &  vd,
const T &  t 
) -> bool
friend

Definition at line 569 of file RecordRef.hpp.

◆ operator== [2/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T , typename = std::enable_if_t<!isRecordRef<T>>>
auto operator== ( const T &  t,
const RecordRef< TView, TBoundRecordCoord, OwnView > &  vd 
) -> bool
friend

Definition at line 575 of file RecordRef.hpp.

◆ operator> [1/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T >
auto operator> ( const RecordRef< TView, TBoundRecordCoord, OwnView > &  vd,
const T &  t 
) -> bool
friend

Definition at line 617 of file RecordRef.hpp.

◆ operator> [2/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T , typename = std::enable_if_t<!isRecordRef<T>>>
auto operator> ( const T &  t,
const RecordRef< TView, TBoundRecordCoord, OwnView > &  vd 
) -> bool
friend

Definition at line 623 of file RecordRef.hpp.

◆ operator>= [1/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T >
auto operator>= ( const RecordRef< TView, TBoundRecordCoord, OwnView > &  vd,
const T &  t 
) -> bool
friend

Definition at line 629 of file RecordRef.hpp.

◆ operator>= [2/2]

template<typename TView , typename TBoundRecordCoord , bool OwnView>
template<typename T , typename = std::enable_if_t<!isRecordRef<T>>>
auto operator>= ( const T &  t,
const RecordRef< TView, TBoundRecordCoord, OwnView > &  vd 
) -> bool
friend

Definition at line 635 of file RecordRef.hpp.

◆ swap

template<typename TView , typename TBoundRecordCoord , bool OwnView>
void swap ( std::conditional_t< OwnView, RecordRef< TView, TBoundRecordCoord, OwnView > &, RecordRef< TView, TBoundRecordCoord, OwnView > >  a,
std::conditional_t< OwnView, RecordRef< TView, TBoundRecordCoord, OwnView > &, RecordRef< TView, TBoundRecordCoord, OwnView > >  b 
)
friend

Definition at line 739 of file RecordRef.hpp.


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