sorted_insert/arc_mutex/collections/
vec_deque.rs

1use 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>>> {}