Skip to content

Commit 6bf57d2

Browse files
authored
Merge pull request #60 from orxfun/iter_over_range
iter_over_range
2 parents ad9a098 + 52e35f6 commit 6bf57d2

File tree

3 files changed

+43
-2
lines changed

3 files changed

+43
-2
lines changed

Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "orx-split-vec"
3-
version = "3.9.0"
3+
version = "3.10.0"
44
edition = "2021"
55
authors = ["orxfun <[email protected]>"]
66
description = "An efficient constant access time vector with dynamic capacity and pinned elements."
@@ -11,7 +11,7 @@ categories = ["data-structures", "rust-patterns", "no-std"]
1111

1212
[dependencies]
1313
orx-pseudo-default = { version = "1.4", default-features = false }
14-
orx-pinned-vec = "3.9"
14+
orx-pinned-vec = "3.10"
1515

1616
[[bench]]
1717
name = "serial_access"

src/concurrent_pinned_vec.rs

+11
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,17 @@ impl<T, G: GrowthWithConstantTimeAccess> ConcurrentPinnedVec<T> for ConcurrentSp
266266
self.slices(0..len).into_iter().flat_map(|x| x.iter())
267267
}
268268

269+
unsafe fn iter_over_range<'a, R: RangeBounds<usize>>(
270+
&'a self,
271+
range: R,
272+
) -> impl Iterator<Item = &'a T> + 'a
273+
where
274+
T: 'a,
275+
{
276+
let [a, b] = orx_pinned_vec::utils::slice::vec_range_limits(&range, None);
277+
self.slices(a..b).into_iter().flat_map(|x| x.iter())
278+
}
279+
269280
unsafe fn slices_mut<R: RangeBounds<usize>>(
270281
&self,
271282
range: R,

tests/con_iter_over_range.rs

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
use orx_split_vec::*;
2+
3+
#[test]
4+
fn iter_over_range() {
5+
let vec = SplitVec::<_, Doubling>::from_iter([0, 1, 2, 3, 4, 5, 6].into_iter());
6+
let con_vec = vec.into_concurrent();
7+
8+
unsafe {
9+
let vec: Vec<_> = con_vec.iter_over_range(..7).copied().collect();
10+
assert_eq!(vec, &[0, 1, 2, 3, 4, 5, 6]);
11+
12+
let vec: Vec<_> = con_vec.iter_over_range(..4).copied().collect();
13+
assert_eq!(vec, &[0, 1, 2, 3]);
14+
15+
let vec: Vec<_> = con_vec.iter_over_range(1..7).copied().collect();
16+
assert_eq!(vec, &[1, 2, 3, 4, 5, 6]);
17+
18+
let vec: Vec<_> = con_vec.iter_over_range(1..4).copied().collect();
19+
assert_eq!(vec, &[1, 2, 3]);
20+
21+
let vec: Vec<_> = con_vec.iter_over_range(4..4).copied().collect();
22+
assert_eq!(vec, &[]);
23+
24+
let vec: Vec<_> = con_vec.iter_over_range(4..3).copied().collect();
25+
assert_eq!(vec, &[]);
26+
27+
let vec: Vec<_> = con_vec.iter_over_range(1..=4).copied().collect();
28+
assert_eq!(vec, &[1, 2, 3, 4]);
29+
}
30+
}

0 commit comments

Comments
 (0)