sorted_insert/arc_rw_lock/collections/
vec.rs1use alloc::vec::Vec;
2use core::cmp::Ordering;
3use std::sync::{Arc, RwLock};
4
5use crate::{
6 SortedInsertArcRwLock, SortedInsertArcRwLockBasic, SortedInsertArcRwLockBy,
7 SortedInsertArcRwLockByKey, SortedInsertBinaryArcRwLock, SortedInsertBinaryArcRwLockBy,
8 SortedInsertBinaryArcRwLockByKey,
9};
10
11impl<T> SortedInsertArcRwLockBasic<T> for Vec<Arc<RwLock<T>>> {
12 #[inline]
13 fn insert_element(&mut self, index: usize, element: Arc<RwLock<T>>) {
14 self.insert(index, element);
15 }
16}
17
18impl<T> SortedInsertArcRwLockBy<T> for Vec<Arc<RwLock<T>>> {
19 #[inline]
20 fn get_sorted_insert_index_by<F: FnMut(&Arc<RwLock<T>>) -> bool>(&self, f: F) -> usize {
21 match self.iter().rposition(f) {
22 Some(i) => i + 1,
23 None => 0,
24 }
25 }
26}
27
28impl<T> SortedInsertArcRwLockByKey<T> for Vec<Arc<RwLock<T>>> {}
29
30impl<T: Ord> SortedInsertArcRwLock<T> for Vec<Arc<RwLock<T>>> {}
31
32impl<T> SortedInsertBinaryArcRwLockBy<T> for Vec<Arc<RwLock<T>>> {
33 #[inline]
34 fn get_sorted_insert_index_binary_by<F: FnMut(&Arc<RwLock<T>>) -> Ordering>(
35 &mut self,
36 f: F,
37 ) -> usize {
38 match self.binary_search_by(f) {
39 Ok(i) => i + 1,
40 Err(i) => i,
41 }
42 }
43}
44
45impl<T> SortedInsertBinaryArcRwLockByKey<T> for Vec<Arc<RwLock<T>>> {}
46
47impl<T: Ord> SortedInsertBinaryArcRwLock<T> for Vec<Arc<RwLock<T>>> {}