From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id p5JjGjUKp2m9pBIAWB0awg (envelope-from ) for ; Tue, 03 Mar 2026 11:20:05 -0500 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=gAKPNwHO; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=gAKPNwHO; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 3DD691E089; Tue, 03 Mar 2026 11:20:05 -0500 (EST) 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 2A56F1E089 for ; Tue, 03 Mar 2026 11:20:02 -0500 (EST) Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 88D164BA2E0D for ; Tue, 3 Mar 2026 16:20:00 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 88D164BA2E0D 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=gAKPNwHO; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=gAKPNwHO Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011061.outbound.protection.outlook.com [52.101.65.61]) by sourceware.org (Postfix) with ESMTPS id 8CFF34B9DB4B for ; Tue, 3 Mar 2026 16:18:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8CFF34B9DB4B 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 8CFF34B9DB4B Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=52.101.65.61 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1772554719; cv=pass; b=jgfGmBIuyq4AqOJwBIxpgh66lpvvcMUoridfeTR1sty3VYzA27G5pEFzBKbNSTb8yTIMqWEbjlFALM4Xj2Ff5oIKIO8qZgjmY/JZiHsGB6tPKRR39rAEvGYdmGc9xol3kB90D/GPbBWE51dvhiafNKvDhXcR3ZT0MJwUt288Zck= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1772554719; c=relaxed/simple; bh=3Rh5NwY7xpugGHIC8OTKCKtYkkYvRJcY3nne/ZIMqw8=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=GLoDv1YhjohtdJoGND8BfO0SmKSHFWvPiSvYqLCtv+1JpPbQnQMcKeC/8hk7ZE2FH2alaCrAkgqLe6hvO3RIQduvFWUjZf2ph6daGWoMXl24VDcWvz2x/SuM36T55aVE9K3QACeSlJqE6itey5ZsvMP5c0GKuGCjybkKDybYN7c= ARC-Authentication-Results: i=3; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8CFF34B9DB4B ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=M7wcPdnM/yoOIdxGM08V8ViYNUkeMyqDRfk7Nz0rrbBonbdJaspqLowgGP0CCZg+8dbbVaySzu2jNWYGW8iuIJNyABV9uRoMzVJnEbLbzBest+ls8HIso0Q3YYtfY5IDD0Y3OrmEYiY0FV//8zy4gtIlHEscvj3wZUHyy8Bt85HP9rtMVJVRf79LswBnrO9iw2JvSmoMjmxM1iTH4204pggYbYh0Pgc1HKxOcRXImAEMRtiYuZsHgn6bZAwPNzRM6UzQU9hX1vO+snTJfRRcDxYvkxv5EAFepM+NnTopjsTPU7qjBAvnECjyhZCtzMF5ttep1EIgxwjVh8wxpzcrfQ== 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=OA8qVbkjctmgCx6gOmqicT3xg/G7qDEbT/b+KWkdAw8=; b=cxjkYXltCdhdjQEn4yQEWaM/3GdSgQ8xnB39XxhVHg+cVfOFdhvIhQOJi8pBRZ53KlG6+ifYDCPe1EsEj+5BFBMCx2/2AzhKctsT9YaQ0ZfnTMWx455LLrgvOgXNQfu8rZgaRHgh9Q/1FjpqxkSuKrkrpg+Z6O7P3gAlnvmEbbu8xSdfzBF26ec3fv5snv/lXC/358jGSW+9D4mMVn5+iyE/RfR7yfnOpY3O2Ii1m2Kv6yQvFV6tytcWn02g4S8rC8EXPQKN6YTpbsoQ93/XMCGTQjtHaWdoRLwtr4iCChqaUeVN6N2nEmgr4ggdIXlzxQhnlGop4mg7TOkHAS27uw== 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=OA8qVbkjctmgCx6gOmqicT3xg/G7qDEbT/b+KWkdAw8=; b=gAKPNwHOJ2HDPP9r72C7OsQpoZgFDEvLvxbaF+3lsNS+lP3nVdREIW7YGH6JJJwv7S66Wq4WPdqgkGl/rH7sO0hqzCvCLKrgLowlG7+fAE6zXII+DUaQ3CMp9+8GEXQtIt07EcQ7Zn2DxmNPc/ZfsyUtzTaX0pBaRYygK+1bp7k= Received: from DUZPR01CA0032.eurprd01.prod.exchangelabs.com (2603:10a6:10:468::11) by MRWPR08MB11705.eurprd08.prod.outlook.com (2603:10a6:501:96::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.22; Tue, 3 Mar 2026 16:18:34 +0000 Received: from DU2PEPF00028D07.eurprd03.prod.outlook.com (2603:10a6:10:468:cafe::80) by DUZPR01CA0032.outlook.office365.com (2603:10a6:10:468::11) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9654.22 via Frontend Transport; Tue, 3 Mar 2026 16:18:33 +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 DU2PEPF00028D07.mail.protection.outlook.com (10.167.242.167) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9632.12 via Frontend Transport; Tue, 3 Mar 2026 16:18:33 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MC7RF1G7Qcpr6xF21W1p4s2G2IvfHxd+xbsIx8b1+VR8u8ciTM6YIl1ZIZoHgS4+cIQBczyZhCD5Ib1RyIUgDYQjLQYS7K9E2yldkoG9E2m9yZpAEdKPPH32OM84VcB2UllPTIw2b8b06qxwm2iAQYKstw0vrSqAgXgKa+EGYXc6aIUw9NQAPMyuDWh7zWIKBVI2w6mDkVgczj+rnaFWlNNmq+xSpSJL30jjY4A3xmSDnjiaJKgiv+DQQglO0eBuX9DCM3rZGCqPEBOxKmwJxXwfJmZbIdwkzR36TYq6JyCbFNzwpHwAimU3HVeCxc4oMAY6gxYGOVwmB9UqyPN/RQ== 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=OA8qVbkjctmgCx6gOmqicT3xg/G7qDEbT/b+KWkdAw8=; b=rNs6Ig6DYHzaS6hTE0Wq6bzFyH+tdf9YO45dkyB4KO42fr1ZB8xXzjEHgrBX7x4O1HoxxAoXzdMd0swsAJkf4PvzhnjD7ZOh34Ac7t+82LUQT5qE5wZLP8ROcSe5wynSKI7JybF8+pl9vCa2Cmq6jWY92IL9DHO+V6SRdADZ8ScWB4eMVdRz1Ll+GmQevNs/MKO2qgwMI6dRNBLwAFL4BdyPhL40KTNdLapCCr9lPvUrRdL2x1of/rPk+uoCeak9kSNmpxgIXT44chSu1P3/XydNFZzMGUoycgAXOP8+Q+jk5ARxK7rH+P+V/kCKu0kcziRfNN4mWzMPtKqcwvQOTg== 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=OA8qVbkjctmgCx6gOmqicT3xg/G7qDEbT/b+KWkdAw8=; b=gAKPNwHOJ2HDPP9r72C7OsQpoZgFDEvLvxbaF+3lsNS+lP3nVdREIW7YGH6JJJwv7S66Wq4WPdqgkGl/rH7sO0hqzCvCLKrgLowlG7+fAE6zXII+DUaQ3CMp9+8GEXQtIt07EcQ7Zn2DxmNPc/ZfsyUtzTaX0pBaRYygK+1bp7k= Received: from PAZP264CA0243.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:239::11) by AM7PR08MB5366.eurprd08.prod.outlook.com (2603:10a6:20b:10b::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.22; Tue, 3 Mar 2026 16:17:29 +0000 Received: from AM4PEPF00025F96.EURPRD83.prod.outlook.com (2603:10a6:102:239:cafe::22) by PAZP264CA0243.outlook.office365.com (2603:10a6:102:239::11) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9654.22 via Frontend Transport; Tue, 3 Mar 2026 16:17:24 +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 AM4PEPF00025F96.mail.protection.outlook.com (10.167.16.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.0 via Frontend Transport; Tue, 3 Mar 2026 16:17:28 +0000 Received: from AZ-NEU-EX04.Arm.com (10.240.25.138) 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; Tue, 3 Mar 2026 16:17:27 +0000 Received: from PF4S4363.arm.com (10.57.82.243) by mail.arm.com (10.240.25.138) with Microsoft SMTP Server id 15.2.2562.29 via Frontend Transport; Tue, 3 Mar 2026 16:17:26 +0000 From: Matthieu Longo To: , Tom Tromey CC: Matthieu Longo Subject: [PATCH v2 2/9] gdb: introduce rgb_color type to simplify existing code Date: Tue, 3 Mar 2026 16:16:52 +0000 Message-ID: <20260303161659.397427-3-matthieu.longo@arm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260303161659.397427-1-matthieu.longo@arm.com> References: <20260303161659.397427-1-matthieu.longo@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM4PEPF00025F96:EE_|AM7PR08MB5366:EE_|DU2PEPF00028D07:EE_|MRWPR08MB11705:EE_ X-MS-Office365-Filtering-Correlation-Id: ed193800-5b66-4216-5d8d-08de79408430 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|376014|36860700013|82310400026; X-Microsoft-Antispam-Message-Info-Original: k6lhYPZSlmgPBszpX3bO8dTh3Gvdo2HMeqzWBQ/+VX4ncU2KexYG/QjgTGTazVCeOuJPyC/2+iSC9OGVim5uPa/FBScnDCYbmbWM2sIRzbAJV4DM1g6F3bT2mEedf27coH/o5zwlCw5JPRDv68Z2Q28t9vCVJA5Tm7Chf9hk4vE0AgkcDh8IBHCJfdmkJbMfNiX9IaczJetW5i853DbVO6uQsi74Zve58SHQjsiL0WLDWaHywphX6mrPb3L/S1g52puq/IB3O3ou9Kb7u1J+plxwg8bh2SRR+T1snCXDI4j68ZVgzLSj02kH4l81Dk+sTLWv56lN3GSJumIPvTeyvwie1t5sVwhkQ9Wr0ZJWOdIuK3KhPZa23/hIGOgO7XHu38hNUEXwAQ/u5Ct3EFZ5WruaHsWgYUtH3A74gds82HK3YoRTwECHDiCnevJswZ3kODW5FQ2cuCvRGcO5FvYwYVN7Bnf3LL+T11UDwfrhqM2RUDU7XCPxz6aPsuIAdDEYnlpOx/MQXFfh3sA6NIK7rCppRZ7Dg6rPp4yIzxYK/TfBbbQHVdT4k2xEBEqg25bo1ZuWaJbICTSRUPWljplREQcV9e3qPr2T6SmhVQCf7bSRe9gWJgz7GU642EFv7+A5w0abPv4jWWgKvIWFYO9gR4E4eo+u+TAFy885n8N7XmATKlmk8j47n5XyYtExH5XSUx3qXAcuF/qAKk4rhiKbfyHx6cSHIWMppB18rs0267FsuYpvEk+FKpcQtAQKYAr1c/qxpq0wQDXjSlgILCQlX5N+SjvLY5hpajtNrTKh6mmJeQvdTcTFGCHH/2fRoaI50HgBGXrSTJrIkW12g8gg0w== 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)(376014)(36860700013)(82310400026); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5366 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU2PEPF00028D07.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 0d12b4ea-ad21-4dde-464e-08de79405d22 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|36860700013|376014|35042699022|14060799003|1800799024; X-Microsoft-Antispam-Message-Info: QFE/XqhQ83WJmKovJIOuGSVTXBl68hj3onlrgZjwtDbGm05tqf+dayHzpaydJ4WUIFhzT7M0LYseeUywAN5kINUZvqRgTrCkrUG/xr2afEszUJ6g5dJZ++PnEr1+AAvvugsr8/9j1Lfg+hnyR41tIKGWxVLJiNv+9/0RJSxC5gSSq78SVXY6MN4T/59lJNoIScpU1dmOUyeZJeJouqgODb1odcw8K3QbB3f9eNvQC9sRnRzcpbtA/VT3J2MoIFntKh7acT3t/VGzULOwrOPRDIZ/mJoqLGQhApR/dEqe8wCIPr5LyjkDiP4SYh8wL5ABeXFQ7QGpcbFpXkyTwWXZUkeTUftgP1c6nEd3abQ7S4BZ2lt3VzgCP8qaOXx7vozespR+/auBWh88qBpKk4QXjGD1nPPiGWN1QMgB0ucymGUNBOIJsxP0YvL9PZqxoBii/NCe2tzt3/d7vdBtpnbPPvlSjR93UJQgMveQvspLA+4Pj7sJ5mxg7PRDkME5p/w59Ym/8A7ZxjI3PKRrWyKurhgQUgGaSIjbKI8IKRh4+Rh6VPjDBMeBUWIWknnCwv43OGHA/0lSoyp+QAZ0JP7pOW2Bu+w7E0Q6tkSxxjzy4xOsBMzAX8hIs+VqvD118uDzt95CVqZZ20coHEwsaMcFM3Pet7Ad8xbnup3wvTr0kr6qKCM7agmghbk6u8puhD72v8KYfZQmBuKVKO7uQUIl1l2sPMNmcVwWDoozC8GBXpYKe2zERYHAfujhE8/G4iA1s+G9QJJe1cKKhBNEIXtoiAEIMB+D0OpimYWB84ShQ9Bku9DCpt+VH5A3k9G5oltZt8ry2myp55RyGlQ+nsBIXA== 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)(36860700013)(376014)(35042699022)(14060799003)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: AAcpg0/R7sPzrvRFcuZUWPPL7Qqp1jojFGC3A1pJhtwhYtCbYZ++iyuchGFoOM//wyYAqB9sFu3gqOkt6PwwJFErfZhxhNdvO6omZYMK9T+UifS2MyWdYJh+dNnb8I/pmuu4gLVHch/82cys2DiA/kQV707MM5Vdj1f1pEcTiQu4aP/NuSFjr96yssUZ/qRx3Ev14LrNNGbXituTYSTMeqg0632aV6Y7Us2V0d9PN0B5J6kfd9EXnImAgbCpdxdQns7ZxHVCdaIq/MhAVsZIPeA7Ty8UQ42+xxwiZCUVUR7GgTmDTF1iV1ShUfB9TjJ0nKPFFSPh0GohFRr1hnmLdgh0JgZbKFh3ALtoaP0XW5qtl3gtJvpwUIkkzoOB2cMYCyBWrILESUhj8xFFxswxUIpK9uLHqAKoRMA1/9ag6Rjc0jKp7YdUFKC0qOt8EuZg X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2026 16:18:33.5248 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ed193800-5b66-4216-5d8d-08de79408430 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: DU2PEPF00028D07.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MRWPR08MB11705 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/python/py-color.c | 10 ++++----- gdb/tui/tui-io.c | 3 +-- gdb/ui-style.c | 33 +++++++++++----------------- gdb/ui-style.h | 38 ++++++++++++++++++++++++++++++++- gdb/unittests/style-selftests.c | 10 ++++----- 5 files changed, 60 insertions(+), 34 deletions(-) diff --git a/gdb/python/py-color.c b/gdb/python/py-color.c index 24589dba265..69c7a2b5860 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..0952b89f4b7 100644 --- a/gdb/ui-style.c +++ b/gdb/ui-style.c @@ -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)); + memcpy (rgb, palette_8colors[m_value], rgb.size_bytes ()); 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)); + memcpy (rgb, palette_16colors[m_value], rgb.size_bytes ()); 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)); + memcpy (rgb, palette_16colors[m_value], rgb.size_bytes ()); 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..72349256034 100644 --- a/gdb/ui-style.h +++ b/gdb/ui-style.h @@ -54,6 +54,34 @@ 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 (); +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 size_t size_bytes () const noexcept + { return m_data.size () * sizeof (decltype (m_data)::value_type); } + + 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 +159,14 @@ struct ui_file_style c, range.first, range.second, static_cast (cs)); } + 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 +252,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