From: Gary Guo <gary@garyguo.net>
To: Matthew Maurer <mmaurer@google.com>
Cc: "Dmitry Baryshkov" <dmitry.baryshkov@oss.qualcomm.com>,
"Bjorn Andersson" <andersson@kernel.org>,
"Konrad Dybcio" <konradybcio@kernel.org>,
"Satya Durga Srinivasu Prabhala" <satyap@quicinc.com>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Alice Ryhl" <aliceryhl@google.com>,
"Trevor Gross" <tmgross@umich.edu>,
"Danilo Krummrich" <dakr@kernel.org>,
"Trilok Soni" <tsoni@quicinc.com>,
linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org,
rust-for-linux@vger.kernel.org
Subject: Re: [PATCH RFC] soc: qcom: socinfo: Re-implement in Rust
Date: Mon, 15 Dec 2025 12:11:45 +0000 [thread overview]
Message-ID: <20251215121145.19b99bb0.gary@garyguo.net> (raw)
In-Reply-To: <CAGSQo03uOmC2G-MnkY-8_R8Bo_s7Q97xEh-re4WPqSuWkotOuA@mail.gmail.com>
On Sat, 13 Dec 2025 08:58:56 -0800
Matthew Maurer <mmaurer@google.com> wrote:
> Some options:
> 1. Make holes explicit
> ```
> pub(crate) const PMIC_MODELS: &[Option<&'str>] = &[
> Some("foo"),
> Some("bar"),
> None,
> Some("baz"),
> // ...
> };
> ```
> This is the one I'd suggest if we want to get rid of the 92. It has
> the downside of some extra explicit `None` entries, but the array
> isn't *that* sparse.
>
> 2. Factor out 92 into a constant.
> 3. Define the constant in terms of index/value pairs instead. I could
> use `const`-time code to produce the array we want:
> ```
> const PMIC_ENTRIES: &[(usize, &str)] = &[(1, "foo"), (9, "bar"), (42, "baz")];
>
> const PMIC_MODELS_LEN: usize = {
> let mut max = 0;
> let mut i = 0;
> while i < PMIC_ENTRIES.len() {
> if PMIC_ENTRIES[i].0 > max {
> max = PMIC_ENTRIES[i].0;
> }
> i += 1;
> }
> max + 1
> };
>
> pub const PMIC_MODELS: [Option<&'static str>; PMIC_MODELS_LEN] = {
> let mut models = [None; PMIC_MODELS_LEN];
> let mut i = 0;
> while i < PMIC_ENTRIES.len() {
> let (idx, val) = PMIC_ENTRIES[i];
> models[idx] = Some(val);
> i += 1;
> }
> models
> };
> ```
> (The slightly icky looking loops are because not all features are
> available in const mode.)
> This seems a bit overkill for what's going on.
How about making a macro for this and make it available from kernel crate?
Looks like this should do what you need?
/// Create a sparse array of `[Option<T>; _]`.
macro_rules! sparse_array {
($(
$index:literal: $value:expr
),* $(,)?) => {{
const SIZE: usize = {
let mut size = 0;
$(if $index >= size {
size = $index + 1;
})*
size
};
const {
let mut arr = [None; SIZE];
$(arr[$index] = Some($value);)*
arr
}
}}
}
fn main() {
const EXAMPLE: &[Option<u32>] = &sparse_array! {
0: 1,
5: 2,
};
println!("{:?}", EXAMPLE);
}
Best,
Gary
next prev parent reply other threads:[~2025-12-15 12:11 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <x2HszWYqUaRfzLW8I1wOegJRSBRXVUzqafU9O_QLG1E-OjqkyUPQKn-jM9dzhvsgMW_M0NGXvrgEkN0p9mV7ww==@protonmail.internalid>
2025-12-13 0:36 ` [PATCH RFC] soc: qcom: socinfo: Re-implement in Rust Matthew Maurer
2025-12-13 2:50 ` Bryan O'Donoghue
2025-12-13 3:01 ` Miguel Ojeda
2025-12-13 3:54 ` Dmitry Baryshkov
2025-12-13 16:58 ` Matthew Maurer
2025-12-15 12:11 ` Gary Guo [this message]
2025-12-15 19:44 ` Dmitry Baryshkov
2025-12-13 13:27 ` Greg KH
2025-12-13 16:26 ` Matthew Maurer
2025-12-13 17:11 ` Matthew Maurer
2025-12-13 13:57 ` Greg KH
2025-12-13 16:24 ` Matthew Maurer
2025-12-13 17:08 ` Matthew Maurer
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=20251215121145.19b99bb0.gary@garyguo.net \
--to=gary@garyguo.net \
--cc=a.hindborg@kernel.org \
--cc=aliceryhl@google.com \
--cc=andersson@kernel.org \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=dakr@kernel.org \
--cc=dmitry.baryshkov@oss.qualcomm.com \
--cc=konradybcio@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=mmaurer@google.com \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=satyap@quicinc.com \
--cc=tmgross@umich.edu \
--cc=tsoni@quicinc.com \
/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 NNTP newsgroup(s).