ai_dataloader/indexable/dataset/
len.rs

1use std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, LinkedList, VecDeque};
2
3/// Basic trait for anything that could have a length.
4/// Even if a lot of struct have a `len()` method in the standard library,
5/// to my knowledge this function is not included into any standard trait.
6pub trait Len {
7    /// Returns the number of elements in the collection, also referred to
8    /// as its length.
9    fn len(&self) -> usize;
10    /// Return `true` if the collection has no element.
11    fn is_empty(&self) -> bool {
12        self.len() == 0
13    }
14}
15
16// TODO; generic macro for all std::collection
17// Add bound to generic?
18impl<T> Len for Vec<T> {
19    fn len(&self) -> usize {
20        self.len()
21    }
22}
23
24impl<T> Len for VecDeque<T> {
25    fn len(&self) -> usize {
26        self.len()
27    }
28}
29
30impl<K, V, H> Len for HashMap<K, V, H> {
31    fn len(&self) -> usize {
32        self.len()
33    }
34}
35
36impl<K, V> Len for BTreeMap<K, V> {
37    fn len(&self) -> usize {
38        self.len()
39    }
40}
41
42impl<T> Len for LinkedList<T> {
43    fn len(&self) -> usize {
44        self.len()
45    }
46}
47
48impl<T> Len for BTreeSet<T> {
49    fn len(&self) -> usize {
50        self.len()
51    }
52}
53
54impl<T, H> Len for HashSet<T, H> {
55    fn len(&self) -> usize {
56        self.len()
57    }
58}
59
60impl<T> Len for BinaryHeap<T> {
61    fn len(&self) -> usize {
62        self.len()
63    }
64}