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 } }