26 #ifndef TILEDARRAY_TILE_INTERFACE_PERMUTE_H__INCLUDED 27 #define TILEDARRAY_TILE_INTERFACE_PERMUTE_H__INCLUDED 29 #include "../type_traits.h" 30 #include "../tile_interface/cast.h" 42 template <
typename Arg>
44 {
return arg.permute(perm); }
48 namespace tile_interface {
54 decltype(
permute(std::declval<T>(),
55 std::declval<Permutation>()))>::type;
57 template <
typename Tile,
typename Enabler =
void>
62 template <
typename Arg>
64 typename
std::enable_if<
65 TiledArray::detail::is_type<result_of_permute_t<Arg> >::value
71 template <
typename Result,
typename Arg,
typename Enabler =
void>
86 template <
typename Result,
typename Arg>
88 typename
std::enable_if<
89 ! std::is_same<Result, result_of_permute_t<Arg> >::value
104 return Cast_::operator()(
permute(arg, perm));
118 template <
typename Arg>
119 struct permute_trait :
129 template <
typename Result,
typename Arg>
134 #endif // TILEDARRAY_TILE_INTERFACE_PERMUTE_H__INCLUDED
typename std::decay< decltype(permute(std::declval< T >(), std::declval< Permutation >()))>::type result_of_permute_t
Arg argument_type
Argument tile type.
result_of_permute_t< Arg > type
Result result_type
Result tile type.
result_type operator()(const argument_type &arg, const Permutation &perm) const
Permutation of a sequence of objects indexed by base-0 indices.
result_type operator()(const argument_type &arg, const Permutation &perm) const
Arg argument_type
Argument tile type.
Result result_type
Result tile type.
TiledArray::Range permute(const TiledArray::Range &r, const Perm &p)
An N-dimensional shallow copy wrapper for tile objects.