From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id oYaDFE8Kr2k8hCAAWB0awg (envelope-from ) for ; Mon, 09 Mar 2026 13:58:39 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=Gc3044/g; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=Gc3044/g; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 48E511E0DD; Mon, 09 Mar 2026 13:58:39 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 675811E089 for ; Mon, 09 Mar 2026 13:58:37 -0400 (EDT) Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id E2CC34B9DB49 for ; Mon, 9 Mar 2026 17:58:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E2CC34B9DB49 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=Gc3044/g; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=Gc3044/g Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazlp170110003.outbound.protection.outlook.com [IPv6:2a01:111:f403:c200::3]) by sourceware.org (Postfix) with ESMTPS id CD1E84BA23FC for ; Mon, 9 Mar 2026 17:57:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CD1E84BA23FC Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org CD1E84BA23FC Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:c200::3 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1773079076; cv=pass; b=sAwgTB3vYVqImnbBsrUX33omHWO6J2lyQUyur0LK0Ue38dY8LVDqR1HnHDSil75yVyqdzcw6KWnkc5pEXmRLj1nLZPzViAjV1sKJEsCb8BGsmVDmniroV0Jf0kl+x+bEPfWZqM4GJ0QkFArvJjhWVWwMXOVN2LBWqt95lO4R1Qs= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1773079076; c=relaxed/simple; bh=kdTRaXm7E67GBopsV/VL1BxBncIjQgtzd2p+PSE1StQ=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=uCHbzmb1HWnly9zJDCAHZN4bEIbdXf786JQzhMucrrk5QnY5L9qcisvZID3ZtUW7giis9ftLa/naUuixNR/NRPZrYaamODwo2leSAPZKwQT2i/oLVAfUWd7IBoATbTa4roadY0alILIAgk1ivjjlO50rIhPfLR0pS0OKI5ZvBOI= ARC-Authentication-Results: i=3; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CD1E84BA23FC ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=ZmelnVB7783GmZk/VB9aq8PkTljcUBZrxsFe/RTllXUYi8/aX0L/3oeeVPEywhqk58J8dqHul0uV0IR6QLoeDxJj+Jm9qDViLsv3Cihw6ZXJBi30wKPMPmjWEHXqV+zbO9cJWv5AKJOuzqJJuvbpmPC7yfXM45JAKvJl2dHoC/ZZBzyU/ssJXxPbj4wmOq95pZMOKJozpp3h7djqg25Z0+HSNa8zwNsp1PMTOQelDbIbrWjBfP5954dU5UfZ/r0WIZUyi7GrC8ZuNCj6S0TtiM98u6h0jv5YeBinzK+Nut9mVlQP6L52ijV2Yr6KQR0N+y7ldWwCYecmuqSwELQkJA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=E9jRFvvU6QD75CPD7NsHS5MBhyYyVpxC2g2cq2RY0G0=; b=yTcOZI2OyqHqh7aDCLw0VjJrod+rt/v8SL7YDWcE2LXBakEQUothEGUbuUhvl1cNoccBIcJyjDX+As10/03tN7cyumGLsJpOisNNkayz0ue30CNYrNMs+GNov7f4ONcErIOm+DmTxsLZM5/aS//iM32jrYRbiA32x07XeNUENgNgHYpBg1QMo68d42vjdeW7Jo0j5ljThAQ7VAtaJpyKVD35aNwDdxzsD/Jj+MBMTNgp29aPzs3Y6r/IdcenVNoOl62nUydhq3QvRnCB2J0SP/hYeCxZfSjzPaI2s3Cy3wO9MqftaeFsWR3zfHyxFijNs9EZuT9NNl/aA9V5i+M70w== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=sourceware.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=E9jRFvvU6QD75CPD7NsHS5MBhyYyVpxC2g2cq2RY0G0=; b=Gc3044/gc2gmbLmlAyYirjquxGssr5m0mEclmxPI96IcZAnfOLEfy67loqAq8guJim13ZgYGbTFVd4+dNhkw30Gck2hte+X4DTJtG1ub8z9FFNFr13NHr0PR+TLVKvoIpuHFBrF5zxvDYvY+wmR7Minb8b7uBS7vXmRYYNK6b2U= Received: from DUZPR01CA0072.eurprd01.prod.exchangelabs.com (2603:10a6:10:3c2::10) by VI0PR08MB11843.eurprd08.prod.outlook.com (2603:10a6:800:317::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.25; Mon, 9 Mar 2026 17:57:43 +0000 Received: from DU6PEPF0000B61E.eurprd02.prod.outlook.com (2603:10a6:10:3c2:cafe::d2) by DUZPR01CA0072.outlook.office365.com (2603:10a6:10:3c2::10) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9678.25 via Frontend Transport; Mon, 9 Mar 2026 17:57:38 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by DU6PEPF0000B61E.mail.protection.outlook.com (10.167.8.133) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9678.18 via Frontend Transport; Mon, 9 Mar 2026 17:57:43 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CzkMKMEgNM78TXqBtXdPvk8YpoUn4vdDdQCSyrDRuZp7fOS3bf+acsElXRDPEW9UkAl1xcdqBSA5c4opkPaWLO9oXhFFssuiw6ppYorzUSqUOo5/KRjMPSXnvbden0uTX91poetb5Gk822hJmD4ZxZdE/06kxijFS25kIngeU6wHcVUSmbI0lfgHq1+3VK8E5PHh7Ob/CvYozcU3WDeQqDQXcObimZoW4uiP9qViSSpfpNtqhW5rnNlPPwJdyD/NtGK+PvThN49HNVM4yhbWMJrEeS9aFGeUJha7CmDCYpOyVZwYeRFx5Oz+NCkTWaAddmrA4M+L9m/p5/u5k31KKQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=E9jRFvvU6QD75CPD7NsHS5MBhyYyVpxC2g2cq2RY0G0=; b=nXyEWCWOpeyUV5LDTHPoHmHykjXHeSF3I6LpONP5jcZY4VBewa/AjhSscR3R9HJxvVN868JHGsJXFo1TC1RWwbo/L7b4Zsz+jRqmeGcefsQqUtx6rkFT6RwbF2/i88NFL3+k/IjHxEwt2awNSahPStSDf1u6kwibsfTbDpzymGd76fyz5bSKJ2ml9WZxknhwbdZw1FC+C0F3CazKsCXbCt7ke9PU2iYb3S4LJX7XE82MYxtYuB3WiFPPLkmPTAGABIfYSZBinEAg/DES0j8p7B4BPnANCUNkxrJQyq2mCFwXHKVv+wfhRGWj2paf/D2aGcleixBKT+yGAu1jQKpv+A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 172.205.89.229) smtp.rcpttodomain=sourceware.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=E9jRFvvU6QD75CPD7NsHS5MBhyYyVpxC2g2cq2RY0G0=; b=Gc3044/gc2gmbLmlAyYirjquxGssr5m0mEclmxPI96IcZAnfOLEfy67loqAq8guJim13ZgYGbTFVd4+dNhkw30Gck2hte+X4DTJtG1ub8z9FFNFr13NHr0PR+TLVKvoIpuHFBrF5zxvDYvY+wmR7Minb8b7uBS7vXmRYYNK6b2U= Received: from DUZPR01CA0227.eurprd01.prod.exchangelabs.com (2603:10a6:10:4b4::15) by VI1PR08MB5405.eurprd08.prod.outlook.com (2603:10a6:803:12f::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.23; Mon, 9 Mar 2026 17:56:37 +0000 Received: from DB5PEPF00014B9D.eurprd02.prod.outlook.com (2603:10a6:10:4b4:cafe::f1) by DUZPR01CA0227.outlook.office365.com (2603:10a6:10:4b4::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9678.25 via Frontend Transport; Mon, 9 Mar 2026 17:56:33 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 172.205.89.229) smtp.mailfrom=arm.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 172.205.89.229 as permitted sender) receiver=protection.outlook.com; client-ip=172.205.89.229; helo=nebula.arm.com; pr=C Received: from nebula.arm.com (172.205.89.229) by DB5PEPF00014B9D.mail.protection.outlook.com (10.167.8.164) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.18 via Frontend Transport; Mon, 9 Mar 2026 17:56:37 +0000 Received: from AZ-NEU-EXJ02.Arm.com (10.240.25.139) by AZ-NEU-EX04.Arm.com (10.240.25.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 9 Mar 2026 17:56:37 +0000 Received: from AZ-NEU-EX04.Arm.com (10.240.25.138) by AZ-NEU-EXJ02.Arm.com (10.240.25.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 9 Mar 2026 17:56:37 +0000 Received: from PF4S4363.arm.com (10.57.58.75) by mail.arm.com (10.240.25.138) with Microsoft SMTP Server id 15.2.2562.29 via Frontend Transport; Mon, 9 Mar 2026 17:56:36 +0000 From: Matthieu Longo To: , Tom Tromey CC: Matthieu Longo Subject: [PATCH v3 1/7] gdb: introduce rgb_color type to simplify existing code Date: Mon, 9 Mar 2026 17:56:18 +0000 Message-ID: <20260309175624.236491-2-matthieu.longo@arm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260309175624.236491-1-matthieu.longo@arm.com> References: <20260309175624.236491-1-matthieu.longo@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: DB5PEPF00014B9D:EE_|VI1PR08MB5405:EE_|DU6PEPF0000B61E:EE_|VI0PR08MB11843:EE_ X-MS-Office365-Filtering-Correlation-Id: 23d17381-7a00-4198-4e22-08de7e055d19 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; ARA:13230040|1800799024|36860700016|376014|82310400026; X-Microsoft-Antispam-Message-Info-Original: +EtRdF8/+BBQwyH8P9ZW8I3D2A633bagkRlTNWB7QUCFraUxwnSlhDV3vPyBX4pH4hZtYnW36AtkJj7YLC95OchxSCb2KI/y2ZFhEY0+MwQMAPTkIJcq6BWcZquBw6EfwDRCuOxuXlOjvkXzBFSgb0paofL/iDIxRQ2Vg1KrfU4ISrvGDQkGLrnusUJ0BTsNrVUFdBzlegwlwweMjRGTu1YyPeMTmTwcNFC1xluxlHgU7NT7Zw3jI0xcKMggu4nHJGvGPHmmR7rGBGFp4oab+nEQgYSFUo/9qq9NWUTXDusZ4ppK8TbXRYeQT4qlNMNjAYylRZ7xcmHI0k4+CNxaMO6OSZ4ILsMPqptlG9Mk4t4Gs29X8oPyGjYMds7llJqIC22GHwTRKm1QUzUFpCT2YClrbT1lMaadiGuzYZTLVwGsxemoZ0oLBY3VoNnwZ00i5b55Qe3dkxNDYHZgbdO8877oYdomV/8bwIdQAT5RUCudTN6BiTC8yrmXc/sXJtd5lmp8HY0tn5VP13otQjkmHuwC4lr7l5JzxhKmLQHmkhTdaLc4XV2AGDoxam+Bg4nU1J5idJGyQv04bymTKz55M6IGCp7WViK7Exv/NmpZQyZfqACmJ7+HWFPnwCMhekM2xAc0TzNe/WY+Qkjg64O3KSqye6hFBxfkl2CAGEVVs+IdAtzaTEBQZNMvtEgTvGdr7HmUYXJxGqR5WDnFIthFu66JPjtyDpVILtlA05DSHdJI9e1nHACVPHXMHJQY6ZJ+J46O9Fz395euLjiy/4VoZA== X-Forefront-Antispam-Report-Untrusted: CIP:172.205.89.229; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:nebula.arm.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(1800799024)(36860700016)(376014)(82310400026); DIR:OUT; SFP:1101; X-Exchange-RoutingPolicyChecked: WxB7v7Lh21fwDm4nd4jsOvFVbQFmKPzyg+U8UDm3X82jQrXftUZbpYaSkURbbiWdoFILIOatCfkHaxpW4vYFUiywIWkVb+0a8grhBHx8EWoDe3FvCnzddaRzpZlxOBAOfS+ZfsJtsaio/KtbSImhASVmlMgCdPGGSiwZmH0rLRpazIMV3arNJbMTN4RT7AE0d2FiMnw1bAJGw3JrF8jlSROaOTjvWMW74vzcQmpVrMg6wfzgW8RJGOKFSyrM2hJp5/QjwvVrPMBb1GO1MLcVuIFdk4jpVjIN6HV35HsMkSSo2yuhawNUFp8FWdq/yahdM+dXCG+Ihatz4ERTRVEoMw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB5405 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU6PEPF0000B61E.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 221199b1-a309-49be-b68e-08de7e0535ed X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|14060799003|376014|36860700016|35042699022|1800799024; X-Microsoft-Antispam-Message-Info: AGv/GRvbnT+G28Mo+uIUeuTd7qOYaRd20NGP23P9NJUrg5xn1cRLoh7ffVO27h2xOJiHxAcFdcFGcB7rxTUNvzMMdiyJb/z+8c8d10bpk78gSxLus+0VhK1yWOURNR8gbp9JAVm+0E2avGnVji7aefnF45RlDJ3r9Y8mPMikYP8yQyP7uzlxgrGdt9uCkcr4EQXKfOrEv1SPmnEmsw+wzEQklVm2P0BiC9kKUgjCfbZmmT7CP8ASNkbLqgCpc+zNhPC+PBcT8Zuomsxz8ykPJc1JhM+0J0db767wVD0OXXhTsUSgUgotiJURnugm8C9QJqGBVg8HR6Vx9wLEQCEdHbjzq887crsZ/2gr3p8Y2PVPoxiXhqVz+i7X/R7D4zR0l6AB0ctDbNEpRtIXUOcqqeMrVZhjYb6S7zJGJjT07m8Tyzah8S1QxJbp+/+sv+03wMmRoU3MOHAm/O+dO9KZhySn4BhDXFswUmSX8Vj8ltpkUEbFOfrOFjYp+4Cjvxuo9kC9JWC2O+AGPZD3WsReOjqv/T7wko1ZgaN1/5jLp+7ltRqfJSPeft6LrdKGbC2WTgWkaY1vc8QZnWYvgFiQoGVS4eS8mzbtm1CfvU50W2FJu+Wh/rRuRsHLDtwKYAVRQa2gAuB37TOLOmLTFy9C5N9fjT01IL11Kvu/HOkbWBPT5zZaaNSk0n6/nUv+CZSpt7NNMyku0kaAYhantlmtpjqE5UecprRwFMoUyGpJmoLME0z1R0BiWcJs4Xj36iJwXkycho0PuPBkpuorpYPAcQ== X-Forefront-Antispam-Report: CIP:4.158.2.129; CTRY:GB; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:outbound-uk1.az.dlp.m.darktrace.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(82310400026)(14060799003)(376014)(36860700016)(35042699022)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XmKtRWM5xnObn5qFyCWcPPvoXnq+cLyw5T/sCA7zYIIT40OLI0e44GgCEsj84alThdVBnPH3YsBkDaK6Uqm63A3Wuv7jBDax0wxUpaUjtzlS+zbykgA6voJhi57Wdg5B7jIcRof7bWws7Dz+Y1DSWf8ujMzZTx/Axpd2h1lyW2SVtLe4rkpPvikw3Lij4cE1VFSfwPYPcZaqnltGxgCVPwbff+sOYaNB3/rc/71/P13vTvvTIMv9SbmcW1Jr/gOwnuykDeOXj93GO+JINRK4lsVJ/Mc/1DGk2xIYGm23UVbKYjj/K9DedwbFVyYd0kb5duZeeJtf+IgdP+xwpra7Ok3glhm6+Kj2oOSo7JdnOqJaCxJIedwTX5wHgykI9iS4Gf6ZDxHJHCRiqchfc6DOxILmstTf30UeVGKdhjRdgoD8wj9lGE6YZ7EBrdawnJ2o X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Mar 2026 17:57:43.4471 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 23d17381-7a00-4198-4e22-08de7e055d19 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[4.158.2.129]; Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: DU6PEPF0000B61E.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR08MB11843 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org This patch replaces the raw uint8[3] buffer used to represent RGB values with a more convenient wrapper, rgb_color, around std::array. It also changes the return type of ui_file_style::color::get_rgb to rgb_color instead of filling a caller-provided buffer, and updates all callers accordingly. This expected benefit of this change consists in: - removing the manual size handling. - proving accessors without using hard-coded indexes. - making the API safer. - simplifying call sites. This refactoring does not introduce any functional change. --- gdb/guile/scm-color.c | 9 ++++---- gdb/mingw-hdep.c | 5 ++--- gdb/python/py-color.c | 10 ++++----- gdb/tui/tui-io.c | 3 +-- gdb/ui-style.c | 37 +++++++++++++-------------------- gdb/ui-style.h | 37 ++++++++++++++++++++++++++++++++- gdb/unittests/style-selftests.c | 10 ++++----- 7 files changed, 67 insertions(+), 44 deletions(-) diff --git a/gdb/guile/scm-color.c b/gdb/guile/scm-color.c index c3a1d663215..4ffe303578c 100644 --- a/gdb/guile/scm-color.c +++ b/gdb/guile/scm-color.c @@ -339,11 +339,10 @@ gdbscm_color_components (SCM self) if (!color.is_direct ()) gdbscm_misc_error (FUNC_NAME, SCM_ARG1, self, "color is not direct"); - uint8_t rgb[3] = {}; - color.get_rgb (rgb); - SCM red = scm_from_uint8 (rgb[0]); - SCM green = scm_from_uint8 (rgb[1]); - SCM blue = scm_from_uint8 (rgb[2]); + rgb_color rgb = color.get_rgb (); + SCM red = scm_from_uint8 (rgb.r ()); + SCM green = scm_from_uint8 (rgb.g ()); + SCM blue = scm_from_uint8 (rgb.b ()); return scm_list_3 (red, green, blue); } diff --git a/gdb/mingw-hdep.c b/gdb/mingw-hdep.c index efad50c4cbe..90ebe252f57 100644 --- a/gdb/mingw-hdep.c +++ b/gdb/mingw-hdep.c @@ -192,11 +192,10 @@ gdb_select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, static int rgb_to_16colors (const ui_file_style::color &color) { - uint8_t rgb[3]; - color.get_rgb (rgb); + rgb_color rgb = color.get_rgb (); int retval = 0; - for (int i = 0; i < 3; i++) + for (int i = 0; i < rgb.size (); i++) { /* Subdivide 256 possible values of each RGB component into 3 regions: no color, normal color, bright color. 256 / 3 = 85, diff --git a/gdb/python/py-color.c b/gdb/python/py-color.c index 04f7addec2f..971209958cf 100644 --- a/gdb/python/py-color.c +++ b/gdb/python/py-color.c @@ -108,11 +108,9 @@ get_attr (PyObject *obj, PyObject *attr_name) if (color.is_direct () && !PyUnicode_CompareWithASCIIString (attr_name, "components")) { - uint8_t rgb[3]; - color.get_rgb (rgb); - - gdbpy_ref<> rgb_objects[3]; - for (int i = 0; i < 3; ++i) + rgb_color rgb = color.get_rgb (); + std::array, rgb.size ()> rgb_objects; + for (auto i = 0u; i < rgb_objects.size (); ++i) { rgb_objects[i] = gdb_py_object_from_ulongest (rgb[i]); if (rgb_objects[i] == nullptr) @@ -123,7 +121,7 @@ get_attr (PyObject *obj, PyObject *attr_name) if (comp == nullptr) return nullptr; - for (int i = 0; i < 3; ++i) + for (auto i = 0u; i < rgb_objects.size (); ++i) if (PyTuple_SetItem (comp.get (), i, rgb_objects[i].release ()) < 0) return nullptr; diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c index f673fbf36f6..a9a50446e8a 100644 --- a/gdb/tui/tui-io.c +++ b/gdb/tui/tui-io.c @@ -255,8 +255,7 @@ get_color (const ui_file_style::color &color, int *result) int next = color_map.size () + 8; if (next >= COLORS) return false; - uint8_t rgb[3]; - color.get_rgb (rgb); + rgb_color rgb = color.get_rgb (); /* We store RGB as 0..255, but curses wants 0..1000. */ if (init_color (next, rgb[0] * 1000 / 255, rgb[1] * 1000 / 255, rgb[2] * 1000 / 255) == ERR) diff --git a/gdb/ui-style.c b/gdb/ui-style.c index 7ab466e2407..05725e314e4 100644 --- a/gdb/ui-style.c +++ b/gdb/ui-style.c @@ -53,7 +53,7 @@ static compiled_regex ansi_regex (ansi_regex_text, REG_EXTENDED, /* This maps 8-color palette to RGB triples. The values come from plain linux terminal. */ -static const uint8_t palette_8colors[][3] = { +static const rgb_color palette_8colors[] = { { 1, 1, 1 }, /* Black. */ { 222, 56, 43 }, /* Red. */ { 57, 181, 74 }, /* Green. */ @@ -66,7 +66,7 @@ static const uint8_t palette_8colors[][3] = { /* This maps 16-color palette to RGB triples. The values come from xterm. */ -static const uint8_t palette_16colors[][3] = { +static const rgb_color palette_16colors[] = { { 0, 0, 0 }, /* Black. */ { 205, 0, 0 }, /* Red. */ { 0, 205, 0 }, /* Green. */ @@ -166,25 +166,22 @@ ui_file_style::color::to_string () const /* See ui-style.h. */ -void -ui_file_style::color::get_rgb (uint8_t *rgb) const +rgb_color +ui_file_style::color::get_rgb () const { + rgb_color rgb; if (m_color_space == color_space::RGB_24BIT) - { - rgb[0] = m_red; - rgb[1] = m_green; - rgb[2] = m_blue; - } + rgb = rgb_color (m_red, m_green, m_blue); else if (m_color_space == color_space::ANSI_8COLOR && 0 <= m_value && m_value <= 7) - memcpy (rgb, palette_8colors[m_value], 3 * sizeof (uint8_t)); + rgb = palette_8colors[m_value]; else if (m_color_space == color_space::AIXTERM_16COLOR && 0 <= m_value && m_value <= 15) - memcpy (rgb, palette_16colors[m_value], 3 * sizeof (uint8_t)); + rgb = palette_16colors[m_value]; else if (m_color_space != color_space::XTERM_256COLOR) gdb_assert_not_reached ("get_rgb called on invalid color"); else if (0 <= m_value && m_value <= 15) - memcpy (rgb, palette_16colors[m_value], 3 * sizeof (uint8_t)); + rgb = palette_16colors[m_value]; else if (m_value >= 16 && m_value <= 231) { int value = m_value; @@ -202,12 +199,12 @@ ui_file_style::color::get_rgb (uint8_t *rgb) const else if (232 <= m_value && m_value <= 255) { uint8_t v = (m_value - 232) * 10 + 8; - rgb[0] = v; - rgb[1] = v; - rgb[2] = v; + rgb = rgb_color (v, v, v); } else gdb_assert_not_reached ("get_rgb called on invalid color"); + + return rgb; } /* See ui-style.h. */ @@ -227,9 +224,7 @@ ui_file_style::color::approximate (const std::vector &spaces) const if (target_space == color_space::RGB_24BIT) { - uint8_t rgb[3]; - get_rgb (rgb); - return color (rgb[0], rgb[1], rgb[2]); + return color (get_rgb ()); } int target_size = 0; @@ -251,14 +246,12 @@ ui_file_style::color::approximate (const std::vector &spaces) const color result = NONE; int best_distance = std::numeric_limits::max (); - uint8_t rgb[3]; - get_rgb (rgb); + rgb_color rgb = get_rgb (); for (int i = 0; i < target_size; ++i) { - uint8_t c_rgb[3]; color c (target_space, i); - c.get_rgb (c_rgb); + rgb_color c_rgb = c.get_rgb (); int d_red = std::abs (rgb[0] - c_rgb[0]); int d_green = std::abs (rgb[1] - c_rgb[1]); int d_blue = std::abs (rgb[2] - c_rgb[2]); diff --git a/gdb/ui-style.h b/gdb/ui-style.h index fca9150889b..a1d656cd39c 100644 --- a/gdb/ui-style.h +++ b/gdb/ui-style.h @@ -54,6 +54,33 @@ extern bool color_space_safe_cast (color_space *result, long c); /* Get the number of colors supported by the terminal where GDB is running. */ extern int gdb_get_ncolors (); +/* Convenient wrapper for RGB color values. */ +struct rgb_color +{ +private: + std::array m_data; + +public: + constexpr rgb_color () + : m_data {} + {} + constexpr rgb_color (uint8_t r, uint8_t g, uint8_t b) + : m_data {r, g, b} + {} + + constexpr uint8_t r () const noexcept { return m_data[0]; } + constexpr uint8_t g () const noexcept { return m_data[1]; } + constexpr uint8_t b () const noexcept { return m_data[2]; } + + constexpr operator uint8_t *() noexcept { return m_data.data (); } + constexpr size_t size () const noexcept { return m_data.size (); } + + constexpr uint8_t &operator[] (std::size_t idx) noexcept + { return m_data[idx]; } + constexpr const uint8_t &operator[] (std::size_t idx) const noexcept + { return m_data[idx]; } +}; + /* Styles that can be applied to a ui_file. */ struct ui_file_style { @@ -131,6 +158,14 @@ struct ui_file_style c, range.first, range.second, static_cast (cs)); } + explicit color (const rgb_color &rgb) + : m_color_space (color_space::RGB_24BIT), + m_red (rgb.r ()), + m_green (rgb.g ()), + m_blue (rgb.b ()) + { + } + color (uint8_t r, uint8_t g, uint8_t b) : m_color_space (color_space::RGB_24BIT), m_red (r), @@ -216,7 +251,7 @@ struct ui_file_style /* Fill in RGB with the red/green/blue values for this color. This may not be called for basic colors or for the "NONE" color. */ - void get_rgb (uint8_t *rgb) const; + rgb_color get_rgb () const; /* Append the ANSI terminal escape sequence for this color to STR. IS_FG indicates whether this is a foreground or background diff --git a/gdb/unittests/style-selftests.c b/gdb/unittests/style-selftests.c index f10a24d4217..9035050bd6c 100644 --- a/gdb/unittests/style-selftests.c +++ b/gdb/unittests/style-selftests.c @@ -31,7 +31,7 @@ run_tests () { ui_file_style style; size_t n_read; - uint8_t rgb[3]; + rgb_color rgb; SELF_CHECK (style.parse ("\033[m", &n_read)); SELF_CHECK (n_read == 3); @@ -94,10 +94,10 @@ run_tests () SELF_CHECK (style.parse ("\033[38;5;112;48;5;249m", &n_read)); SELF_CHECK (n_read == 20); SELF_CHECK (!style.get_foreground ().is_basic ()); - style.get_foreground ().get_rgb (rgb); + rgb = style.get_foreground ().get_rgb (); CHECK_RGB (0x87, 0xd7, 0); SELF_CHECK (!style.get_background ().is_basic ()); - style.get_background ().get_rgb (rgb); + rgb = style.get_background ().get_rgb (); CHECK_RGB (0xb2, 0xb2, 0xb2); SELF_CHECK (style.get_intensity () == ui_file_style::NORMAL); SELF_CHECK (!style.is_italic ()); @@ -109,10 +109,10 @@ run_tests () SELF_CHECK (style.parse ("\033[38;2;83;84;85;48;2;0;1;254;2;7m", &n_read)); SELF_CHECK (n_read == 33); SELF_CHECK (!style.get_foreground ().is_basic ()); - style.get_foreground ().get_rgb (rgb); + rgb = style.get_foreground ().get_rgb (); CHECK_RGB (83, 84, 85); SELF_CHECK (!style.get_background ().is_basic ()); - style.get_background ().get_rgb (rgb); + rgb = style.get_background ().get_rgb (); CHECK_RGB (0, 1, 254); SELF_CHECK (style.get_intensity () == ui_file_style::DIM); SELF_CHECK (!style.is_italic ()); -- 2.53.0