From: Martin Jambor <mjambor@suse.cz>
To: Richard Sandiford <richard.sandiford@arm.com>, gcc-patches@gcc.gnu.org
Subject: Re: [09/23] Add a cut-down version of std::span (array_slice)
Date: Wed, 10 Aug 2022 18:03:50 +0200 [thread overview]
Message-ID: <ri6mtcckrvd.fsf@suse.cz> (raw)
In-Reply-To: <mpteekx8yf8.fsf@arm.com>
Hello,
I have one more question/comment about array_slice. Ever since I
started to use it...
On Fri, Nov 13 2020, Richard Sandiford via Gcc-patches wrote:
> A later patch wants to be able to pass around subarray views of an
> existing array. The standard class to do that is std::span, but it's
> a C++20 thing. This patch just adds a cut-down version of it.
>
> The intention is just to provide what's currently needed.
>
> gcc/
> * vec.h (array_slice): New class.
> ---
> gcc/vec.h | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 120 insertions(+)
>
> diff --git a/gcc/vec.h b/gcc/vec.h
> index f02beddc975..7768de9f518 100644
> --- a/gcc/vec.h
> +++ b/gcc/vec.h
> @@ -2128,6 +2128,126 @@ release_vec_vec (vec<vec<T> > &vec)
> vec.release ();
> }
>
> +// Provide a subset of the std::span functionality. (We can't use std::span
> +// itself because it's a C++20 feature.)
> +//
> +// In addition, provide an invalid value that is distinct from all valid
> +// sequences (including the empty sequence). This can be used to return
> +// failure without having to use std::optional.
> +//
> +// There is no operator bool because it would be ambiguous whether it is
> +// testing for a valid value or an empty sequence.
> +template<typename T>
> +class array_slice
> +{
> + template<typename OtherT> friend class array_slice;
> +
> +public:
> + using value_type = T;
> + using iterator = T *;
> + using const_iterator = const T *;
> +
> + array_slice () : m_base (nullptr), m_size (0) {}
> +
> + template<typename OtherT>
> + array_slice (array_slice<OtherT> other)
> + : m_base (other.m_base), m_size (other.m_size) {}
> +
> + array_slice (iterator base, unsigned int size)
> + : m_base (base), m_size (size) {}
> +
> + template<size_t N>
> + array_slice (T (&array)[N]) : m_base (array), m_size (N) {}
> +
> + template<typename OtherT>
> + array_slice (const vec<OtherT> &v)
> + : m_base (v.address ()), m_size (v.length ()) {}
> +
> + iterator begin () { return m_base; }
> + iterator end () { return m_base + m_size; }
> +
> + const_iterator begin () const { return m_base; }
> + const_iterator end () const { return m_base + m_size; }
> +
> + value_type &front ();
> + value_type &back ();
> + value_type &operator[] (unsigned int i);
> +
> + const value_type &front () const;
> + const value_type &back () const;
> + const value_type &operator[] (unsigned int i) const;
> +
> + size_t size () const { return m_size; }
...this has been a constant source of compile errors, because vectors
have length () and this is size ().
I understand that the motivation was consistency with std::span, but do
we really want to add another inconsistency with ourselves?
Given that array_slice is not that much used yet, I believe we can still
change to be consistent with vectors. I personally think we should but
at the very least, if we keep it as it is, I'd like us to do so
deliberately.
Thanks,
Martin
next prev parent reply other threads:[~2022-08-10 16:03 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-13 8:10 [00/23] Make fwprop use an on-the-side RTL SSA representation Richard Sandiford
2020-11-13 8:11 ` [01/23] vec: Silence clang warning Richard Sandiford
2020-11-25 19:58 ` Jeff Law
2020-11-13 8:12 ` [02/23] rtlanal: Remove noop_move_p REG_EQUAL condition Richard Sandiford
2020-11-25 20:00 ` Jeff Law
2020-11-13 8:12 ` [03/23] reginfo: Add a global_reg_set Richard Sandiford
2020-11-25 20:01 ` Jeff Law
2020-11-13 8:13 ` [04/23] Move iterator_range to a new iterator-utils.h file Richard Sandiford
2020-11-25 20:02 ` Jeff Law
2020-11-13 8:13 ` [05/23] Add more iterator utilities Richard Sandiford
2020-11-25 20:12 ` Jeff Law
2020-11-13 8:14 ` [06/23] Add an RAII class for managing obstacks Richard Sandiford
2020-11-25 20:15 ` Jeff Law
2020-11-13 8:14 ` [07/23] Add a class that multiplexes two pointer types Richard Sandiford
2020-11-25 20:23 ` Jeff Law
2020-11-26 16:15 ` Richard Sandiford
2020-11-30 1:28 ` Jeff Law
2020-11-25 23:33 ` Martin Sebor
2020-11-26 17:06 ` Richard Sandiford
2020-11-27 18:12 ` Richard Sandiford
2020-11-28 0:17 ` Martin Sebor
2020-12-17 0:17 ` Richard Sandiford
2020-12-17 14:21 ` Tom Tromey
2020-12-17 15:38 ` Richard Sandiford
2020-12-17 15:44 ` Nathan Sidwell
2021-01-04 15:32 ` Jeff Law
2020-11-13 8:15 ` [08/23] Add an alternative splay tree implementation Richard Sandiford
2020-12-02 20:36 ` Jeff Law
2020-12-17 0:29 ` Richard Sandiford
2021-01-04 15:27 ` Jeff Law
2021-01-01 8:25 ` Andreas Schwab
2021-01-04 14:53 ` Richard Sandiford
2021-01-04 15:02 ` Andreas Schwab
2021-01-04 15:42 ` Richard Sandiford
2021-01-05 12:13 ` Richard Biener
2020-11-13 8:15 ` [09/23] Add a cut-down version of std::span (array_slice) Richard Sandiford
2020-11-30 19:56 ` Jeff Law
2022-08-03 15:13 ` Martin Jambor
2022-08-03 15:31 ` Richard Sandiford
2022-08-10 16:03 ` Martin Jambor [this message]
2022-08-11 6:58 ` Richard Biener
2022-08-16 7:59 ` Richard Sandiford
2020-11-13 8:16 ` [10/23] Tweak the way that is_a is implemented Richard Sandiford
2020-12-02 5:15 ` Jeff Law
2020-11-13 8:16 ` [11/23] Split update_cfg_for_uncondjump out of combine Richard Sandiford
2020-11-30 6:14 ` Jeff Law
2020-11-13 8:17 ` [12/23] Export print-rtl.c:print_insn_with_notes Richard Sandiford
2020-11-25 20:24 ` Jeff Law
2020-11-13 8:18 ` [13/23] recog: Split out a register_asm_p function Richard Sandiford
2020-11-25 20:24 ` Jeff Law
2020-11-13 8:18 ` [14/23] simplify-rtx: Put simplify routines into a class Richard Sandiford
2020-11-30 19:54 ` Jeff Law
2020-11-13 8:19 ` [15/23] recog: Add a validate_change_xveclen function Richard Sandiford
2020-11-30 20:03 ` Jeff Law
2020-11-13 8:19 ` [16/23] recog: Add a way of temporarily undoing changes Richard Sandiford
2020-11-25 20:27 ` Jeff Law
2020-12-17 0:22 ` Richard Sandiford
2020-11-13 8:20 ` [17/23] recog: Add a class for propagating into insns Richard Sandiford
2020-12-03 22:32 ` Jeff Law
2020-11-13 8:20 ` [18/23] recog: Add an RAII class for undoing insn changes Richard Sandiford
2020-11-25 20:27 ` Jeff Law
2020-11-13 8:20 ` [19/23] rtlanal: Add some new helper classes Richard Sandiford
2020-12-13 17:30 ` Jeff Law
2020-12-14 16:37 ` Richard Sandiford
2020-12-14 20:02 ` Jeff Law
2020-11-13 8:21 ` [20/23] rtlanal: Add simple_regno_set Richard Sandiford
2020-11-25 20:31 ` Jeff Law
2020-12-17 0:47 ` Richard Sandiford
2021-01-04 15:28 ` Jeff Law
2020-11-13 8:22 ` [21/23] doc: Add documentation for rtl-ssa Richard Sandiford
2020-11-30 6:26 ` Jeff Law
2020-11-13 8:23 ` [PATCH 22/23] Add rtl-ssa Richard Sandiford
2020-12-16 3:31 ` Jeff Law
2020-12-17 0:33 ` Richard Sandiford
2020-12-19 20:01 ` Jeff Law
2020-11-13 8:24 ` [PATCH 23/23] fwprop: Rewrite to use RTL SSA Richard Sandiford
2020-12-16 3:52 ` Jeff Law
2020-12-17 0:34 ` Richard Sandiford
2020-11-25 19:58 ` [00/23] Make fwprop use an on-the-side RTL SSA representation Jeff Law
2020-11-26 16:03 ` Richard Sandiford
2020-11-27 15:56 ` Michael Matz
2020-11-27 16:31 ` Richard Sandiford
2020-11-30 21:13 ` Jeff Law
2020-12-01 0:03 ` Michael Matz
2020-12-01 10:15 ` Richard Sandiford
2020-12-02 0:25 ` Jeff Law
2020-11-30 6:45 ` Jeff Law
2020-11-30 14:12 ` Richard Sandiford
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ri6mtcckrvd.fsf@suse.cz \
--to=mjambor@suse.cz \
--cc=gcc-patches@gcc.gnu.org \
--cc=richard.sandiford@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).