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