Fit range to len

This commit is contained in:
Natsu Kagami 2025-05-13 00:03:44 +02:00
parent 2756c463d5
commit e5b9dee591
Signed by: nki
GPG key ID: 55A032EB38B49ADB

View file

@ -102,7 +102,7 @@ impl Scores for Vec<Score> {
} }
fn get_range(&mut self, range: Range<usize>) -> impl Future<Output = Result<&[Score]>> + Send { fn get_range(&mut self, range: Range<usize>) -> impl Future<Output = Result<&[Score]>> + Send {
future::ok(&self[range]) future::ok(&self[fit_range_to_len(self.len(), range)])
} }
async fn find<F: FnMut(&Score) -> bool + Send>(&mut self, mut f: F) -> Result<Option<&Score>> { async fn find<F: FnMut(&Score) -> bool + Send>(&mut self, mut f: F) -> Result<Option<&Score>> {
@ -110,6 +110,11 @@ impl Scores for Vec<Score> {
} }
} }
#[inline]
fn fit_range_to_len(len: usize, range: Range<usize>) -> Range<usize> {
range.start.min(len)..range.end.min(len)
}
/// A scores stream with a fetcher. /// A scores stream with a fetcher.
pub(super) struct ScoresFetcher<T> { pub(super) struct ScoresFetcher<T> {
fetcher: T, fetcher: T,
@ -166,7 +171,7 @@ impl<T: FetchScores> Scores for ScoresFetcher<T> {
break; break;
} }
} }
Ok(&self.scores[range.start.min(self.len())..range.end.min(self.len())]) Ok(&self.scores[fit_range_to_len(self.len(), range)])
} }
async fn find<F: FnMut(&Score) -> bool + Send>(&mut self, mut f: F) -> Result<Option<&Score>> { async fn find<F: FnMut(&Score) -> bool + Send>(&mut self, mut f: F) -> Result<Option<&Score>> {