[PATCH v3 4/5] libstdc++: Implement __mdspan::__size.
Tomasz Kaminski
tkaminsk@redhat.com
Mon Jul 7 08:48:19 GMT 2025
On Fri, Jul 4, 2025 at 10:34 AM Luc Grosheintz <luc.grosheintz@gmail.com>
wrote:
> The current code uses __mdspan::__fwd_prod(__exts, __rank) to express
> computing the size of an extent. This commit adds an function __mdspan::
> __size(__exts) to express the idea more directly.
>
> libstdc++-v3/ChangeLog:
>
> * include/std/mdspan (__mdspan::__size): New function.
>
> Signed-off-by: Luc Grosheintz <luc.grosheintz@gmail.com>
> ---
>
LGTM
> libstdc++-v3/include/std/mdspan | 12 ++++++++----
> 1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/libstdc++-v3/include/std/mdspan
> b/libstdc++-v3/include/std/mdspan
> index 1d6cdc93d80..7e970c2b905 100644
> --- a/libstdc++-v3/include/std/mdspan
> +++ b/libstdc++-v3/include/std/mdspan
> @@ -398,6 +398,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
> __rev_prod(const _Extents& __exts, size_t __r) noexcept
> { return __exts_prod(__exts, __r + 1, __exts.rank()); }
>
> + template<typename _Extents>
> + constexpr typename _Extents::index_type
> + __size(const _Extents& __exts) noexcept
> + { return __fwd_prod(__exts, __exts.rank()); }
> +
> template<typename _IndexType, size_t... _Counts>
> auto __build_dextents_type(integer_sequence<size_t, _Counts...>)
> -> extents<_IndexType, ((void) _Counts, dynamic_extent)...>;
> @@ -591,7 +596,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>
> constexpr index_type
> required_span_size() const noexcept
> - { return __mdspan::__fwd_prod(_M_extents, extents_type::rank()); }
> + { return __mdspan::__size(_M_extents); }
>
> template<__mdspan::__valid_index_type<index_type>... _Indices>
> requires (sizeof...(_Indices) == extents_type::rank())
> @@ -730,7 +735,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>
> constexpr index_type
> required_span_size() const noexcept
> - { return __mdspan::__fwd_prod(_M_extents, extents_type::rank()); }
> + { return __mdspan::__size(_M_extents); }
>
> template<__mdspan::__valid_index_type<index_type>... _Indices>
> requires (sizeof...(_Indices) == extents_type::rank())
> @@ -986,8 +991,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
> {
> if constexpr (!is_always_exhaustive())
> {
> - constexpr auto __rank = extents_type::rank();
> - auto __size = __mdspan::__fwd_prod(_M_extents, __rank);
> + auto __size = __mdspan::__size(_M_extents);
> if(__size > 0)
> return __size == required_span_size();
> }
> --
> 2.49.0
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20250707/e7d620a1/attachment.htm>
More information about the Libstdc++
mailing list