1use crate::properties::{DefinedOrderProperty, IsEmptyProperty, LengthProperty};
4use crate::std::collections::{
5 btree_map, btree_set, linked_list, vec_deque, BTreeMap, BTreeSet, BinaryHeap, LinkedList,
6 VecDeque,
7};
8use crate::std::{array, slice};
9use crate::std::{vec, vec::Vec};
10
11impl<T> DefinedOrderProperty for [T] {}
12impl<T, const N: usize> DefinedOrderProperty for [T; N] {}
13impl<T, const N: usize> DefinedOrderProperty for array::IntoIter<T, N> {}
14impl<T> DefinedOrderProperty for slice::Iter<'_, T> {}
15impl<T> DefinedOrderProperty for slice::IterMut<'_, T> {}
16impl<T> DefinedOrderProperty for Vec<T> {}
17impl<T> DefinedOrderProperty for vec::IntoIter<T> {}
18impl<T> DefinedOrderProperty for BTreeSet<T> {}
19impl<T> DefinedOrderProperty for btree_set::IntoIter<T> {}
20impl<T> DefinedOrderProperty for btree_set::Iter<'_, T> {}
21impl<K, V> DefinedOrderProperty for btree_map::IntoIter<K, V> {}
22impl<K, V> DefinedOrderProperty for btree_map::Iter<'_, K, V> {}
23impl<T> DefinedOrderProperty for LinkedList<T> {}
24impl<T> DefinedOrderProperty for linked_list::IntoIter<T> {}
25impl<T> DefinedOrderProperty for linked_list::Iter<'_, T> {}
26impl<T> DefinedOrderProperty for linked_list::IterMut<'_, T> {}
27impl<T> DefinedOrderProperty for VecDeque<T> {}
28impl<T> DefinedOrderProperty for vec_deque::IntoIter<T> {}
29impl<T> DefinedOrderProperty for vec_deque::Iter<'_, T> {}
30impl<T> DefinedOrderProperty for vec_deque::IterMut<'_, T> {}
31
32impl<T> IsEmptyProperty for BinaryHeap<T> {
33 fn is_empty_property(&self) -> bool {
34 self.is_empty()
35 }
36}
37
38impl<K, V> IsEmptyProperty for BTreeMap<K, V> {
39 fn is_empty_property(&self) -> bool {
40 self.is_empty()
41 }
42}
43
44impl<T> IsEmptyProperty for BTreeSet<T> {
45 fn is_empty_property(&self) -> bool {
46 self.is_empty()
47 }
48}
49
50impl<T> IsEmptyProperty for LinkedList<T> {
51 fn is_empty_property(&self) -> bool {
52 self.is_empty()
53 }
54}
55
56impl<T> IsEmptyProperty for VecDeque<T> {
57 fn is_empty_property(&self) -> bool {
58 self.is_empty()
59 }
60}
61
62impl<T> LengthProperty for BinaryHeap<T> {
63 fn length_property(&self) -> usize {
64 self.len()
65 }
66}
67
68impl<K, V> LengthProperty for BTreeMap<K, V> {
69 fn length_property(&self) -> usize {
70 self.len()
71 }
72}
73
74impl<T> LengthProperty for BTreeSet<T> {
75 fn length_property(&self) -> usize {
76 self.len()
77 }
78}
79
80impl<T> LengthProperty for LinkedList<T> {
81 fn length_property(&self) -> usize {
82 self.len()
83 }
84}
85
86impl<T> LengthProperty for VecDeque<T> {
87 fn length_property(&self) -> usize {
88 self.len()
89 }
90}
91
92impl<T, const N: usize> IsEmptyProperty for [T; N] {
93 fn is_empty_property(&self) -> bool {
94 self.is_empty()
95 }
96}
97
98#[cfg(feature = "std")]
99mod std {
100 use crate::properties::{IsEmptyProperty, LengthProperty};
101 use std::collections::{HashMap, HashSet};
102
103 impl<K, V, S> IsEmptyProperty for HashMap<K, V, S> {
104 fn is_empty_property(&self) -> bool {
105 self.is_empty()
106 }
107 }
108
109 impl<T, S> IsEmptyProperty for HashSet<T, S> {
110 fn is_empty_property(&self) -> bool {
111 self.is_empty()
112 }
113 }
114
115 impl<K, V, S> LengthProperty for HashMap<K, V, S> {
116 fn length_property(&self) -> usize {
117 self.len()
118 }
119 }
120
121 impl<T, S> LengthProperty for HashSet<T, S> {
122 fn length_property(&self) -> usize {
123 self.len()
124 }
125 }
126}
127
128mod hashbrown {
129 use crate::properties::{IsEmptyProperty, LengthProperty};
130 use hashbrown::{HashMap, HashSet};
131
132 impl<K, V, S> IsEmptyProperty for HashMap<K, V, S> {
133 fn is_empty_property(&self) -> bool {
134 self.is_empty()
135 }
136 }
137
138 impl<T, S> IsEmptyProperty for HashSet<T, S> {
139 fn is_empty_property(&self) -> bool {
140 self.is_empty()
141 }
142 }
143
144 impl<T, const N: usize> LengthProperty for [T; N] {
145 fn length_property(&self) -> usize {
146 self.len()
147 }
148 }
149
150 impl<K, V, S> LengthProperty for HashMap<K, V, S> {
151 fn length_property(&self) -> usize {
152 self.len()
153 }
154 }
155
156 impl<T, S> LengthProperty for HashSet<T, S> {
157 fn length_property(&self) -> usize {
158 self.len()
159 }
160 }
161}