hexga_core/collections/length.rs
1use std::collections::*;
2
3pub trait Length
4{
5 // Returns the number of elements inside this collection, also referred as a 'length'.
6 fn len(&self) -> usize;
7
8 /// True if the container contains 0 elements.
9 ///
10 /// ```rust
11 /// use hexga_core::prelude::*;
12 ///
13 /// assert_eq!([1, 2, 3].is_empty(), false);
14 ///
15 /// let empty_array : [i32; 0] = [];
16 /// assert_eq!(empty_array.is_empty(), true);
17 ///
18 /// assert_eq!("".is_empty(), true);
19 /// assert_eq!("hello".is_empty(), false);
20 ///
21 /// assert_eq!("".is_empty(), !("".is_not_empty()));
22 /// ```
23 #[inline(always)]
24 fn is_empty(&self) -> bool {
25 self.len() == 0
26 }
27
28 /// True if the container contains at least one element.
29 /// Will always be different than `is_empty()`.
30 ///
31 /// ```rust
32 /// use hexga_core::prelude::*;
33 ///
34 /// assert_eq!([1, 2, 3].is_not_empty(), true);
35 ///
36 /// let empty_array : [i32; 0] = [];
37 /// assert_eq!(empty_array.is_not_empty(), false);
38 ///
39 /// assert_eq!("".is_not_empty(), false);
40 /// assert_eq!("hello".is_not_empty(), true);
41 ///
42 /// assert_eq!("".is_empty(), !("".is_not_empty()));
43 /// ```
44 #[inline(always)]
45 fn is_not_empty(&self) -> bool {
46 !self.is_empty()
47 }
48}
49
50use std::ffi::OsStr;
51
52impl<T> Length for Vec<T> { fn len(&self) -> usize { self.len() } }
53impl<T> Length for VecDeque<T> { fn len(&self) -> usize { self.len() } }
54impl<T,S> Length for HashSet<T,S> { fn len(&self) -> usize { self.len() } }
55impl<T> Length for BinaryHeap<T> { fn len(&self) -> usize { self.len() } }
56impl<T> Length for BTreeSet<T> { fn len(&self) -> usize { self.len() } }
57impl<T> Length for LinkedList<T> { fn len(&self) -> usize { self.len() } }
58impl<K, V, S> Length for HashMap<K, V, S> { fn len(&self) -> usize { self.len() } }
59impl<K, V> Length for BTreeMap<K, V> { fn len(&self) -> usize { self.len() } }
60impl<T> Length for [T] { fn len(&self) -> usize { self.len() } }
61impl Length for String { fn len(&self) -> usize { self.len() } }
62impl Length for str { fn len(&self) -> usize { self.len() } }
63impl Length for OsStr { fn len(&self) -> usize { self.len() } }
64impl<T, const N: usize> Length for [T; N] { fn len(&self) -> usize { N } }