diff options
author | Alice Ryhl <aliceryhl@google.com> | 2025-02-10 12:53:36 +0300 |
---|---|---|
committer | Miguel Ojeda <ojeda@kernel.org> | 2025-03-09 00:35:34 +0300 |
commit | 52ae96f5187c437a262e0497efff4b02e1ab0eab (patch) | |
tree | fd6d54583733c60282ec8558cac87eff48dbd7e8 /lib/crypto/mpi/mpi-sub-ui.c | |
parent | 998c65733b95e8de45cbc10aa8d69652d15fa9d3 (diff) | |
download | linux-52ae96f5187c437a262e0497efff4b02e1ab0eab.tar.xz |
rust: list: make the cursor point between elements
I've been using the linked list cursor for a few different things, and I
find it inconvenient to use because all of the functions have signatures
along the lines of `Self -> Option<Self>`. The root cause of these
signatures is that the cursor points *at* an element, rather than
*between* two elements.
Thus, change the cursor API to point between two elements. This is
inspired by the stdlib linked list (well, really by this guy [1]), which
also uses cursors that point between elements.
The `peek_next` method returns a helper that lets you look at and
optionally remove the element, as one common use-case of cursors is to
iterate a list to look for an element, then remove that element.
For many of the methods, this will reduce how many we need since they
now just need a prev/next method, instead of the current state where you
may end up needing all of curr/prev/next. Also, if we decide to add a
function for splitting a list into two lists at the cursor, then a
cursor that points between elements is exactly what makes the most
sense.
Another advantage is that this means you can now have a cursor into an
empty list.
Link: https://rust-unofficial.github.io/too-many-lists/sixth-cursors-intro.html [1]
Reviewed-by: Andreas Hindborg <a.hindborg@kernel.org>
Reviewed-by: Boqun Feng <boqun.feng@gmail.com>
Signed-off-by: Alice Ryhl <aliceryhl@google.com>
Link: https://lore.kernel.org/r/20250210-cursor-between-v7-2-36f0215181ed@google.com
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Diffstat (limited to 'lib/crypto/mpi/mpi-sub-ui.c')
0 files changed, 0 insertions, 0 deletions