From: "Sourceware to Gerrit sync (Code Review)" <gerrit@gnutoolchain-gerrit.osci.io>
To: Tom Tromey <tromey@sourceware.org>, gdb-patches@sourceware.org
Subject: [pushed] Introduce basic_safe_range
Date: Thu, 12 Dec 2019 23:50:00 -0000 [thread overview]
Message-ID: <20191212235009.D6FAA28175@gnutoolchain-gerrit.osci.io> (raw)
In-Reply-To: <gerrit.1572831291000.Ib351ef6fd435129a5053c64e5561877e1459ab37@gnutoolchain-gerrit.osci.io>
The original change was created by Tom Tromey.
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/498
......................................................................
Introduce basic_safe_range
This introduces the basic_safe_range class, which can be used to
create a basic_safe_iterator. This also changes basic_safe_iterator
in two ways.
First, it simplifies the constructor. This seemed unnecessarily
complicated to me, and keeping it this way would prevent the second
change...
... which is to add a second constructor for initializing the
one-past-the-end iterator that is stored in basic_safe_iterator.
gdb/ChangeLog
2019-12-12 Tom Tromey <tom@tromey.com>
* gdbsupport/safe-iterator.h (basic_safe_iterator): Simplify. Add
second constructor.
(basic_safe_range): New class.
Change-Id: Ib351ef6fd435129a5053c64e5561877e1459ab37
---
M gdb/ChangeLog
M gdb/gdbsupport/safe-iterator.h
2 files changed, 53 insertions(+), 5 deletions(-)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 26f764e..368d7f0 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
2019-12-12 Tom Tromey <tom@tromey.com>
+ * gdbsupport/safe-iterator.h (basic_safe_iterator): Simplify. Add
+ second constructor.
+ (basic_safe_range): New class.
+
+2019-12-12 Tom Tromey <tom@tromey.com>
+
* progspace.c (program_space::multi_objfile_p): New method.
* printcmd.c (info_symbol_command): Update.
* maint.c (maintenance_translate_address): Update.
diff --git a/gdb/gdbsupport/safe-iterator.h b/gdb/gdbsupport/safe-iterator.h
index 89aec01..1a98b42 100644
--- a/gdb/gdbsupport/safe-iterator.h
+++ b/gdb/gdbsupport/safe-iterator.h
@@ -48,17 +48,29 @@
typedef typename Iterator::iterator_category iterator_category;
typedef typename Iterator::difference_type difference_type;
- /* Construct by forwarding all arguments to the underlying
- iterator. */
- template<typename... Args>
- explicit basic_safe_iterator (Args &&...args)
- : m_it (std::forward<Args> (args)...),
+ /* Construct using the given argument; the end iterator is default
+ constructed. */
+ template<typename Arg>
+ explicit basic_safe_iterator (Arg &&arg)
+ : m_it (std::forward<Arg> (arg)),
m_next (m_it)
{
if (m_it != m_end)
++m_next;
}
+ /* Construct the iterator using the first argument, and construct
+ the end iterator using the second argument. */
+ template<typename Arg>
+ explicit basic_safe_iterator (Arg &&arg, Arg &&arg2)
+ : m_it (std::forward<Arg> (arg)),
+ m_next (m_it),
+ m_end (std::forward<Arg> (arg2))
+ {
+ if (m_it != m_end)
+ ++m_next;
+ }
+
/* Create a one-past-end iterator. */
basic_safe_iterator ()
{}
@@ -90,4 +102,34 @@
Iterator m_end {};
};
+/* A range adapter that wraps another range, and then returns safe
+ iterators wrapping the original range's iterators. */
+
+template<typename Range>
+class basic_safe_range
+{
+public:
+
+ typedef basic_safe_iterator<typename Range::iterator> iterator;
+
+ explicit basic_safe_range (Range range)
+ : m_range (range)
+ {
+ }
+
+ iterator begin () const
+ {
+ return iterator (m_range.begin (), m_range.end ());
+ }
+
+ iterator end () const
+ {
+ return iterator (m_range.end (), m_range.end ());
+ }
+
+private:
+
+ Range m_range;
+};
+
#endif /* COMMON_SAFE_ITERATOR_H */
--
Gerrit-Project: binutils-gdb
Gerrit-Branch: master
Gerrit-Change-Id: Ib351ef6fd435129a5053c64e5561877e1459ab37
Gerrit-Change-Number: 498
Gerrit-PatchSet: 2
Gerrit-Owner: Tom Tromey <tromey@sourceware.org>
Gerrit-MessageType: newpatchset
next prev parent reply other threads:[~2019-12-12 23:50 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-04 1:35 [review] " Tom Tromey (Code Review)
2019-12-12 23:50 ` Sourceware to Gerrit sync (Code Review) [this message]
2019-12-12 23:50 ` [pushed] " Sourceware to Gerrit sync (Code Review)
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=20191212235009.D6FAA28175@gnutoolchain-gerrit.osci.io \
--to=gerrit@gnutoolchain-gerrit.osci.io \
--cc=gdb-patches@sourceware.org \
--cc=noreply@gnutoolchain-gerrit.osci.io \
--cc=tromey@sourceware.org \
/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).