sorted_insert/collections/
vec_deque.rs

1use core::cmp::Ordering;
2
3use std::collections::VecDeque;
4
5use crate::{SortedInsert, SortedInsertBasic, SortedInsertBy, SortedInsertByKey};
6use crate::{SortedInsertBinary, SortedInsertBinaryBy, SortedInsertBinaryByKey};
7
8impl<T> SortedInsertBasic<T> for VecDeque<T> {
9    #[inline]
10    fn insert_element(&mut self, index: usize, element: T) {
11        self.insert(index, element);
12    }
13}
14
15impl<T> SortedInsertBy<T> for VecDeque<T> {
16    #[inline]
17    fn get_sorted_insert_index_by<F: FnMut(&T) -> bool>(&self, f: F) -> usize {
18        match self.iter().rposition(f) {
19            Some(i) => i + 1,
20            None => 0,
21        }
22    }
23}
24
25impl<T> SortedInsertByKey<T> for VecDeque<T> {}
26
27impl<T: Ord> SortedInsert<T> for VecDeque<T> {}
28
29impl<T> SortedInsertBinaryBy<T> for VecDeque<T> {
30    #[inline]
31    fn get_sorted_insert_index_binary_by<F: FnMut(&T) -> Ordering>(&mut self, f: F) -> usize {
32        match self.make_contiguous().binary_search_by(f) {
33            Ok(i) => i + 1,
34            Err(i) => i,
35        }
36    }
37}
38
39impl<T> SortedInsertBinaryByKey<T> for VecDeque<T> {}
40
41impl<T: Ord> SortedInsertBinary<T> for VecDeque<T> {}