6 #include "../ProxyRefOpMixin.hpp"
14 template<
typename UserT,
typename StoredT>
19 return static_cast<UserT
>(v);
24 return static_cast<StoredT
>(v);
28 template<
typename RecordDim>
31 template<
typename Key>
34 if constexpr(isRecordCoord<Key>)
35 return mp_identity<GetType<RecordDim, Key>>{};
37 return mp_identity<Key>{};
40 template<
typename Pair,
typename Key = mp_first<Pair>,
typename StoredT = mp_second<Pair>>
41 using fn = mp_list<Key, ChangeTypeProjection<typename decltype(recordDimType<Key>())::type, StoredT>>;
44 template<
typename RecordDim,
typename ReplacementMap>
45 using MakeProjectionMap = mp_transform<MakeProjectionPair<RecordDim>::template fn, ReplacementMap>;
56 template<
typename,
typename>
57 typename InnerMapping,
58 typename ReplacementMap>
60 :
Projection<ArrayExtents, RecordDim, InnerMapping, internal::MakeProjectionMap<RecordDim, ReplacementMap>>
76 template<
template<
typename,
typename>
typename InnerMapping,
typename ReplacementMap>
79 template<
typename ArrayExtents,
typename RecordDim>
84 template<
typename Mapping>
89 typename TArrayExtents,
91 template<
typename,
typename>
92 typename InnerMapping,
93 typename ReplacementMap>
94 inline constexpr
bool isChangeType<ChangeType<TArrayExtents, TRecordDim, InnerMapping, ReplacementMap>> =
true;
#define LLAMA_FN_HOST_ACC_INLINE
mp_transform< MakeProjectionPair< RecordDim >::template fn, ReplacementMap > MakeProjectionMap
constexpr bool isChangeType
ArrayExtents(Args...) -> ArrayExtents< typename internal::IndexTypeFromArgs< std::size_t, Args... >::type,(Args{}, dyn)... >
typename Inner::ArrayExtents ArrayExtents
static auto store(UserT v) -> StoredT
static auto load(StoredT v) -> UserT
static auto recordDimType()
mp_list< Key, ChangeTypeProjection< typename decltype(recordDimType< Key >())::type, StoredT > > fn