sorted_insert/arc_mutex/collections/
vec.rs

1use alloc::vec::Vec;
2use core::cmp::Ordering;
3use std::sync::{Arc, Mutex};
4
5use crate::{
6    SortedInsertArcMutex, SortedInsertArcMutexBasic, SortedInsertArcMutexBy,
7    SortedInsertArcMutexByKey, SortedInsertBinaryArcMutex, SortedInsertBinaryArcMutexBy,
8    SortedInsertBinaryArcMutexByKey,
9};
10
11impl<T> SortedInsertArcMutexBasic<T> for Vec<Arc<Mutex<T>>> {
12    #[inline]
13    fn insert_element(&mut self, index: usize, element: Arc<Mutex<T>>) {
14        self.insert(index, element);
15    }
16}
17
18impl<T> SortedInsertArcMutexBy<T> for Vec<Arc<Mutex<T>>> {
19    #[inline]
20    fn get_sorted_insert_index_by<F: FnMut(&Arc<Mutex<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> SortedInsertArcMutexByKey<T> for Vec<Arc<Mutex<T>>> {}
29
30impl<T: Ord> SortedInsertArcMutex<T> for Vec<Arc<Mutex<T>>> {}
31
32impl<T> SortedInsertBinaryArcMutexBy<T> for Vec<Arc<Mutex<T>>> {
33    #[inline]
34    fn get_sorted_insert_index_binary_by<F: FnMut(&Arc<Mutex<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> SortedInsertBinaryArcMutexByKey<T> for Vec<Arc<Mutex<T>>> {}
46
47impl<T: Ord> SortedInsertBinaryArcMutex<T> for Vec<Arc<Mutex<T>>> {}