From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 94527 invoked by alias); 4 Jul 2018 04:51:42 -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 94518 invoked by uid 89); 4 Jul 2018 04:51:41 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy=sk:perform X-HELO: simark.ca Received: from simark.ca (HELO simark.ca) (158.69.221.121) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 04 Jul 2018 04:51:40 +0000 Received: from [10.0.0.11] (unknown [192.222.164.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id F3E4E1E48F; Wed, 4 Jul 2018 00:51:38 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=simark.ca; s=mail; t=1530679899; bh=uuMHHz40nRKUEJncPx7DgzP3azWRaRYrng1TtE3fguM=; h=Subject:To:References:From:Date:In-Reply-To:From; b=EWESbFY4oNPjMyQkv657T9cXM7jk2GA3r52q2Cm0QuiywEaM5o80HZbWK7E7ZHoCH iwwri0tq1I09F13v5uALcwN0BoKerTRYfU3Z0sgXXtUWggAedHPN7jKfXjly5nZKeX hHPkJAtX5rDOwoTtt0kMEnjUEDwbNol0y+yV8nj0= Subject: Re: [RFA] Use std::vector for moribund_locations To: Tom Tromey , gdb-patches@sourceware.org References: <20180605192346.5509-1-tom@tromey.com> From: Simon Marchi Message-ID: Date: Wed, 04 Jul 2018 04:51:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 MIME-Version: 1.0 In-Reply-To: <20180605192346.5509-1-tom@tromey.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2018-07/txt/msg00069.txt.bz2 On 2018-06-05 03:23 PM, Tom Tromey wrote: > @@ -12112,16 +12104,18 @@ update_global_location_list (enum ugll_insert_mode insert_mode) > void > breakpoint_retire_moribund (void) > { > - struct bp_location *loc; > - int ix; > - > - for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, loc); ++ix) > - if (--(loc->events_till_retirement) == 0) > - { > - decref_bp_location (&loc); > - VEC_unordered_remove (bp_location_p, moribund_locations, ix); > - --ix; > - } > + auto it = std::remove_if (moribund_locations.begin (), > + moribund_locations.end (), > + [] (bp_location *loc) > + { > + if (--(loc->events_till_retirement) == 0) > + { > + decref_bp_location (&loc); > + return true; > + } > + return false; > + }); > + moribund_locations.erase (it, moribund_locations.end ()); > } Just a note that this changes an "unordered remove" to an "ordered remove". If we don't need to keep the relative order of the remaining elements, it might be good performance-wise to keep the original behavior. This could be done by keeping the original code structure (iterating by index) and calling undordered_remove. Simon