Low-Level Abstraction of Memory Access
RecordRef.hpp File Reference
#include "Concepts.hpp"
#include "ProxyRefOpMixin.hpp"
#include "StructName.hpp"
#include "View.hpp"
#include "macros.hpp"
#include <boost/functional/hash.hpp>
#include <iosfwd>
#include <type_traits>
+ Include dependency graph for RecordRef.hpp:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  llama::internal::Assign
 
struct  llama::internal::PlusAssign
 
struct  llama::internal::MinusAssign
 
struct  llama::internal::MultiplyAssign
 
struct  llama::internal::DivideAssign
 
struct  llama::internal::ModuloAssign
 
struct  llama::RecordRef< TView, TBoundRecordCoord, OwnView >
 
struct  llama::RecordRef< TView, TBoundRecordCoord, OwnView >::Loader
 
struct  llama::RecordRef< TView, TBoundRecordCoord, OwnView >::LoaderConst
 
struct  llama::internal::ValueOf< T, typename >
 
struct  llama::internal::ValueOf< T, std::enable_if_t< isRecordRef< T > > >
 
struct  llama::internal::ValueOf< T, std::enable_if_t< isProxyReference< T > > >
 
struct  llama::internal::ValueOf< T & >
 
struct  llama::ScopedUpdate< Reference, typename >
 
struct  llama::ScopedUpdate< Reference, std::enable_if_t< std::is_fundamental_v< typename internal::ValueOf< Reference >::type > > >
 
struct  llama::internal::ReferenceTo< T, typename >
 
struct  llama::internal::ReferenceTo< T, std::enable_if_t< isRecordRef< T > &&!isOne< T > > >
 
struct  llama::internal::ReferenceTo< T, std::enable_if_t< isProxyReference< T > > >
 
struct  std::tuple_size< llama::RecordRef< View, BoundRecordCoord, OwnView > >
 
struct  std::tuple_element< I, llama::RecordRef< View, BoundRecordCoord, OwnView > >
 
struct  std::tuple_element< I, const llama::RecordRef< View, BoundRecordCoord, OwnView > >
 
struct  std::hash< llama::RecordRef< View, BoundRecordCoord, OwnView > >
 

Namespaces

 llama
 
 llama::internal
 

Functions

template<typename View , typename BoundRecordCoord , bool OwnView>
auto llama::copyRecord (const RecordRef< View, BoundRecordCoord, OwnView > &rr)
 Returns a One with the same record dimension as the given record ref, with values copyied from rr. More...
 
template<typename Functor , typename LeftRecord , typename RightView , typename RightBoundRecordDim , bool RightOwnView>
auto llama::internal::recordRefArithOperator (LeftRecord &left, const RecordRef< RightView, RightBoundRecordDim, RightOwnView > &right) -> LeftRecord &
 
template<typename Functor , typename LeftRecord , typename T >
auto llama::internal::recordRefArithOperator (LeftRecord &left, const T &right) -> LeftRecord &
 
template<typename Functor , typename LeftRecord , typename RightView , typename RightBoundRecordDim , bool RightOwnView>
auto llama::internal::recordRefRelOperator (const LeftRecord &left, const RecordRef< RightView, RightBoundRecordDim, RightOwnView > &right) -> bool
 
template<typename Functor , typename LeftRecord , typename T >
auto llama::internal::recordRefRelOperator (const LeftRecord &left, const T &right) -> bool
 
template<typename ProxyReference , typename T , std::enable_if_t<!isRecordRef< std::decay_t< ProxyReference >>, int > = 0>
auto llama::internal::asTupleImpl (ProxyReference &&leaf, T) -> ProxyReference
 
template<typename TWithOptionalConst , typename T , std::enable_if_t<!isRecordRef< std::decay_t< TWithOptionalConst >>, int > = 0>
auto llama::internal::asTupleImpl (TWithOptionalConst &leaf, T) -> std::reference_wrapper< TWithOptionalConst >
 
template<typename RecordRef , typename T , std::size_t N, std::size_t... Is>
auto llama::internal::asTupleImplForArray (RecordRef &&vd, T(&&)[N], std::index_sequence< Is... >)
 
template<typename RecordRef , typename T , std::size_t N>
auto llama::internal::asTupleImpl (RecordRef &&vd, T(&&a)[N])
 
template<typename RecordRef , typename... Fields>
auto llama::internal::asTupleImpl (RecordRef &&vd, Record< Fields... >)
 
template<typename ProxyReference , typename T , std::enable_if_t<!isRecordRef< std::decay_t< ProxyReference >>, int > = 0>
auto llama::internal::asFlatTupleImpl (ProxyReference &&leaf, T) -> std::tuple< ProxyReference >
 
template<typename TWithOptionalConst , typename T , std::enable_if_t<!isRecordRef< std::decay_t< TWithOptionalConst >>, int > = 0>
auto llama::internal::asFlatTupleImpl (TWithOptionalConst &leaf, T) -> std::tuple< TWithOptionalConst & >
 
template<typename RecordRef , typename T , std::size_t N, std::size_t... Is>
auto llama::internal::asFlatTupleImplForArray (RecordRef &&vd, T(&&)[N], std::index_sequence< Is... >)
 
template<typename RecordRef , typename T , std::size_t N>
auto llama::internal::asFlatTupleImpl (RecordRef &&vd, T(&&a)[N])
 
template<typename RecordRef , typename... Fields>
auto llama::internal::asFlatTupleImpl (RecordRef &&vd, Record< Fields... >)
 
template<typename Tuple1 , typename Tuple2 , std::size_t... Is>
void llama::internal::assignTuples (Tuple1 &&dst, Tuple2 &&src, std::index_sequence< Is... >)
 
template<typename T1 , typename T2 >
void llama::internal::assignTupleElement (T1 &&dst, T2 &&src)
 
template<typename T , typename Tuple , std::size_t... Is>
auto llama::internal::makeFromTuple (Tuple &&src, std::index_sequence< Is... >)
 
template<typename T , typename Simd , typename SrcRC , typename DstRC >
void llama::internal::loadSimdFromField (const T &srcRef, Simd &dstSimd, SrcRC srcRC, DstRC dstRC)
 
template<typename Simd , typename TFwd , typename SrcRC , typename DstRC >
void llama::internal::storeSimdToField (const Simd &srcSimd, TFwd &&dstRef, SrcRC srcRC, DstRC dstRC)
 
template<typename ViewA , typename BoundRecordDimA , bool OwnViewA, typename ViewB , typename BoundRecordDimB , bool OwnViewB>
auto llama::swap (RecordRef< ViewA, BoundRecordDimA, OwnViewA > &a, RecordRef< ViewB, BoundRecordDimB, OwnViewB > &b) noexcept -> std::enable_if_t< std::is_same_v< typename RecordRef< ViewA, BoundRecordDimA, OwnViewA >::AccessibleRecordDim, typename RecordRef< ViewB, BoundRecordDimB, OwnViewB >::AccessibleRecordDim >>
 
template<typename View , typename BoundRecordCoord , bool OwnView>
auto llama::operator<< (std::ostream &os, const RecordRef< View, BoundRecordCoord, OwnView > &vr) -> std::ostream &
 
template<typename RecordRefFwd , typename Functor >
constexpr void llama::forEachLeaf (RecordRefFwd &&vr, Functor &&functor)
 
template<typename T >
auto llama::decayCopy (T &&valueOrRef) -> typename internal::ValueOf< T >::type
 Pulls a copy of the given value or reference. Proxy references are resolved to their value types. More...
 
template<typename T >
 llama::ScopedUpdate (T) -> ScopedUpdate< typename internal::ReferenceTo< std::remove_reference_t< T >>::type >
 

Variables

template<typename View >
constexpr auto llama::isRecordRef = false
 
template<typename View , typename BoundRecordCoord , bool OwnView>
constexpr auto llama::isRecordRef< RecordRef< View, BoundRecordCoord, OwnView > > = true
 
template<typename T , typename = void>
constexpr auto llama::internal::isTupleLike = false
 
template<typename... Ts>
constexpr auto llama::internal::dependentFalse = false
 
template<typename T , typename SFINAE , typename... Args>
constexpr auto llama::internal::isDirectListInitializableImpl = false
 
template<typename T , typename... Args>
constexpr auto llama::internal::isDirectListInitializable = isDirectListInitializableImpl<T, void, Args...>
 
template<typename T , typename Tuple >
constexpr auto llama::internal::isDirectListInitializableFromTuple = false
 
template<typename T , template< typename... > typename Tuple, typename... Args>
constexpr auto llama::internal::isDirectListInitializableFromTuple< T, Tuple< Args... > > = isDirectListInitializable<T, Args...>