26 #ifndef TILEDARRAY_SRC_TILEDARRAY_TILE_INTERFACE_SCALE_H__INCLUDED 27 #define TILEDARRAY_SRC_TILEDARRAY_TILE_INTERFACE_SCALE_H__INCLUDED 29 #include "../type_traits.h" 30 #include "../permutation.h" 42 template <
typename Arg,
typename Scalar,
43 typename std::enable_if<TiledArray::detail::is_numeric<Scalar>::value>::type* =
nullptr>
44 inline auto scale(
const Arg& arg,
const Scalar factor)
45 {
return arg.scale(factor); }
55 template <
typename Arg,
typename Scalar,
56 typename std::enable_if<TiledArray::detail::is_numeric<Scalar>::value>::type* =
nullptr>
58 {
return arg.scale(factor, perm); }
67 template <
typename Result,
typename Scalar,
68 typename std::enable_if<TiledArray::detail::is_numeric<Scalar>::value>::type* =
nullptr>
69 inline Result&
scale_to(Result& result,
const Scalar factor)
70 {
return result.scale_to(factor); }
73 namespace tile_interface {
75 template <
typename... T>
78 template <
typename... T>
82 template <
typename Arg,
typename Scalar,
typename Enabler =
void>
87 template <
typename Arg,
typename Scalar>
89 typename
std::enable_if<
90 TiledArray::detail::is_type<result_of_scale_t<Arg, Scalar> >::value
96 template <
typename Result,
typename Arg,
typename Scalar,
97 typename Enabler =
void>
101 "Cannot scale tiles by a non-scalar type");
111 return scale(arg, factor);
118 return scale(arg, factor, perm);
122 template <
typename Result,
typename Arg,
typename Scalar>
124 typename
std::enable_if<
125 ! std::is_same<Result, result_of_scale_t<Arg, Scalar> >::value
130 "Cannot scale tiles by a non-scalar type");
141 return cast(
scale(arg, factor));
150 return cast(
scale(arg, factor, perm));
156 template <
typename Result,
typename Arg,
typename Scalar,
157 typename Enabler =
void>
161 "Cannot scale tiles by a non-scalar type");
176 template <
typename Result,
typename Arg,
typename Scalar>
178 typename
std::enable_if<
179 ! std::is_same<Result, result_of_scale_t<Arg, Scalar> >::value
184 "Cannot scale tiles by a non-scalar type");
209 template <
typename Arg,
typename Scalar>
221 template <
typename Result,
typename Arg,
typename Scalar>
229 #endif // TILEDARRAY_SRC_TILEDARRAY_TILE_INTERFACE_SCALE_H__INCLUDED
result_type operator()(const argument_type &arg, const scalar_type factor, const Permutation &perm) const
Scalar scalar_type
Scaling factor type.
result_type operator()(const argument_type &arg, const scalar_type factor) const
Tile< Result > & scale_to(Tile< Result > &result, const Scalar factor)
Scale to the result tile.
decltype(scale_to(std::declval< T >()...)) result_of_scale_to_t
void scale(DistArray< Tile, Policy > &a, typename DistArray< Tile, Policy >::element_type scaling_factor)
Scalar scalar_type
Scaling factor type.
Result result_type
Result tile type.
decltype(scale(std::declval< T >()...)) result_of_scale_t
result_type operator()(const argument_type &arg, const scalar_type factor) const
Scalar scalar_type
The scaling factor type.
Result result_type
Result tile type.
result_of_scale_t< Arg > type
Scalar scalar_type
The scaling factor type.
Arg argument_type
Argument tile type.
result_type operator()(const argument_type &arg, const scalar_type factor, const Permutation &perm) const
Result result_type
Result tile type.
result_type operator()(argument_type &arg, const scalar_type factor) const
result_type operator()(const argument_type &arg, const scalar_type factor) const
Arg argument_type
Argument tile type.
Permutation of a sequence of objects indexed by base-0 indices.
Arg argument_type
Argument tile type.
Result result_type
Result tile type.
Arg argument_type
Argument tile type.