Rework smallest_range_containing to handle duplicates - #160198
Open
scottmcm wants to merge 1 commit into
Open
Conversation
Collaborator
|
r? @nnethercote rustbot has assigned @nnethercote. Use Why was this reviewer chosen?The reviewer was selected based on:
|
nnethercote
approved these changes
Jul 30, 2026
Contributor
There was a problem hiding this comment.
The new code makes sense. Some observations from someone who doesn't know anything about enum representation stuff...
WrappingRangeis a really weird type.smallest_range_containingis a really weird operation on a really weird type.- The docs for
smallest_range_containingcontain only one case where theWrappingRangeactually wraps, which seems low because that's trickier than the non-wrapping case.
Contributor
|
r=me if you want it, after considering the comment above. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
@theemathas pointed out that this method I added in #159509 is implicitly assuming that there are no duplicates in the input. That's not a problem for its one use today -- an enum whose layout matters can't have duplicate discriminants -- but it could be a sharp edge in future, so this PR reworks it to handle duplicate values fine.
As a bonus, as I tried a couple different approaches (from just asserting to deduping to more) I found this rephrasing that I think is clearer. In particular, while the
.iter().copied().cycle().skip(1)I'd written works, it's definitely not something that you look at and think "oh, obviously". I think this version using.array_windows::<2>()is easier to follow and splitting the wraparound and non-wraparound cases also simplifies themin_by_keylambda.No changes to any layouts from this -- it just refactors this function.