orx_split_vec/
into_concurrent_pinned_vec.rs1use crate::{ConcurrentSplitVec, GrowthWithConstantTimeAccess, SplitVec};
2use orx_pinned_vec::IntoConcurrentPinnedVec;
3
4impl<T, G: GrowthWithConstantTimeAccess> IntoConcurrentPinnedVec<T> for SplitVec<T, G> {
5 type ConPinnedVec = ConcurrentSplitVec<T, G>;
6
7 fn into_concurrent(self) -> Self::ConPinnedVec {
8 self.into()
9 }
10
11 fn into_concurrent_filled_with<F>(mut self, fill_with: F) -> Self::ConPinnedVec
12 where
13 F: Fn() -> T,
14 {
15 if let Some(fragment) = self.fragments.last_mut() {
16 let (len, capacity) = (fragment.len(), fragment.capacity());
17 let num_additional = capacity - len;
18 for _ in 0..num_additional {
19 fragment.push(fill_with());
20 }
21
22 self.len += num_additional;
23
24 debug_assert_eq!(
25 self.len,
26 self.fragments.iter().map(|x| x.len()).sum::<usize>()
27 );
28 }
29
30 self.into()
31 }
32}