From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 71581 invoked by alias); 4 Nov 2019 01:35:01 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 71516 invoked by uid 89); 4 Nov 2019 01:35:01 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-21.2 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3 autolearn=ham version=3.3.1 spammy=adapter X-HELO: mx1.osci.io Received: from polly.osci.io (HELO mx1.osci.io) (8.43.85.229) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 04 Nov 2019 01:34:59 +0000 Received: by mx1.osci.io (Postfix, from userid 994) id 5351720266; Sun, 3 Nov 2019 20:34:57 -0500 (EST) Received: from gnutoolchain-gerrit.osci.io (gnutoolchain-gerrit.osci.io [8.43.85.239]) by mx1.osci.io (Postfix) with ESMTP id 677B920D4D for ; Sun, 3 Nov 2019 20:34:53 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by gnutoolchain-gerrit.osci.io (Postfix) with ESMTP id 553552816A for ; Sun, 3 Nov 2019 20:34:53 -0500 (EST) X-Gerrit-PatchSet: 1 Date: Mon, 04 Nov 2019 01:35:00 -0000 From: "Tom Tromey (Code Review)" To: gdb-patches@sourceware.org Message-ID: Auto-Submitted: auto-generated X-Gerrit-MessageType: newchange Subject: [review] Introduce basic_safe_range X-Gerrit-Change-Id: Ib351ef6fd435129a5053c64e5561877e1459ab37 X-Gerrit-Change-Number: 498 X-Gerrit-ChangeURL: X-Gerrit-Commit: 482cd76737d935e85130f1087da10b9f897d19a6 References: Reply-To: tromey@sourceware.org, gdb-patches@sourceware.org MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Disposition: inline User-Agent: Gerrit/3.0.3-75-g9005159e5d Content-Type: text/plain; charset=UTF-8 X-SW-Source: 2019-11/txt/msg00068.txt.bz2 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. 2019-11-03 Tom Tromey * 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 94bbb25..6a3afe3 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2019-11-03 Tom Tromey + * gdbsupport/safe-iterator.h (basic_safe_iterator): Simplify. Add + second constructor. + (basic_safe_range): New class. + +2019-11-03 Tom Tromey + * 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 - explicit basic_safe_iterator (Args &&...args) - : m_it (std::forward (args)...), + /* Construct using the given argument; the end iterator is default + constructed. */ + template + explicit basic_safe_iterator (Arg &&arg) + : m_it (std::forward (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 + explicit basic_safe_iterator (Arg &&arg, Arg &&arg2) + : m_it (std::forward (arg)), + m_next (m_it), + m_end (std::forward (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 +class basic_safe_range +{ +public: + + typedef basic_safe_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: 1 Gerrit-Owner: Tom Tromey Gerrit-MessageType: newchange