@@ -26,6 +26,8 @@ namespace MDSPAN_IMPL_PROPOSED_NAMESPACE {
2626inline namespace __p1673_version_0 {
2727namespace linalg {
2828
29+ namespace detail {
30+
2931// Scaled sum of squares of a vector's elements
3032template <class Scalar >
3133struct sum_of_squares_result {
@@ -53,19 +55,23 @@ struct is_custom_vector_sum_of_squares_avail<
5355 && ! impl::is_inline_exec_v<Exec>
5456 >
5557 >
56- : std::true_type{};
58+ : std::bool_constant<
59+ std::is_floating_point_v<typename x_t::value_type> &&
60+ std::is_floating_point_v<Scalar>
61+ >
62+ {};
5763
5864} // end anonymous namespace
5965
6066template <class ElementType ,
61- class SizeType ,
67+ class IndexType ,
6268 ::std::size_t ext0,
6369 class Layout ,
6470 class Accessor ,
6571 class Scalar >
6672sum_of_squares_result<Scalar> vector_sum_of_squares (
6773 impl::inline_exec_t && /* exec */ ,
68- mdspan<ElementType, extents<SizeType , ext0>, Layout, Accessor> x,
74+ mdspan<ElementType, extents<IndexType , ext0>, Layout, Accessor> x,
6975 sum_of_squares_result<Scalar> init)
7076{
7177 using std::abs;
@@ -79,7 +85,7 @@ sum_of_squares_result<Scalar> vector_sum_of_squares(
7985
8086 Scalar scale = init.scaling_factor ;
8187 Scalar ssq = init.scaled_sum_of_squares ;
82- for (SizeType i = 0 ; i < x.extent (0 ); ++i) {
88+ for (IndexType i = 0 ; i < x.extent (0 ); ++i) {
8389 if (abs (x (i)) != 0.0 ) {
8490 const auto absxi = abs (x (i));
8591 if (scale < absxi) {
@@ -102,14 +108,14 @@ sum_of_squares_result<Scalar> vector_sum_of_squares(
102108
103109template <class ExecutionPolicy ,
104110 class ElementType ,
105- class SizeType ,
111+ class IndexType ,
106112 ::std::size_t ext0,
107113 class Layout ,
108114 class Accessor ,
109115 class Scalar >
110116sum_of_squares_result<Scalar> vector_sum_of_squares (
111117 ExecutionPolicy&& exec,
112- mdspan<ElementType, extents<SizeType , ext0>, Layout, Accessor> v,
118+ mdspan<ElementType, extents<IndexType , ext0>, Layout, Accessor> v,
113119 sum_of_squares_result<Scalar> init)
114120{
115121 constexpr bool use_custom = is_custom_vector_sum_of_squares_avail<
@@ -125,18 +131,19 @@ sum_of_squares_result<Scalar> vector_sum_of_squares(
125131}
126132
127133template <class ElementType ,
128- class SizeType ,
134+ class IndexType ,
129135 ::std::size_t ext0,
130136 class Layout ,
131137 class Accessor ,
132138 class Scalar >
133139sum_of_squares_result<Scalar> vector_sum_of_squares (
134- mdspan<ElementType, extents<SizeType , ext0>, Layout, Accessor> v,
140+ mdspan<ElementType, extents<IndexType , ext0>, Layout, Accessor> v,
135141 sum_of_squares_result<Scalar> init)
136142{
137143 return vector_sum_of_squares (impl::default_exec_t {}, v, init);
138144}
139145
146+ } // end namespace detail
140147
141148} // end namespace linalg
142149} // end inline namespace __p1673_version_0
0 commit comments