wiwi_memory_usage/impls/
slice.rs1use crate::{ MemoryUsage, MemoryUsageConst };
2use crate::macros::{ impl_memory_usage, impl_memory_usage_only_const };
3
4impl_memory_usage! {
5 { T: MemoryUsage }
6 [T]
7 |self| {
8 self.iter().map(T::memory_usage).sum()
10 };
11 compacted |self| self.iter().map(T::memory_usage_compacted).sum();
12 compact |self| self.iter_mut().map(T::compact_memory).sum();
13 ref compacted |self| self.iter().map(T::memory_usage_compacted_ref).sum();
14 ref compact |self| self.iter().map(T::compact_memory_ref).sum();
15}
16
17impl_memory_usage_only_const! {
18 { T: MemoryUsageConst }
19 { T: [const] MemoryUsageConst }
20 [T]
21 |self| {
22 let mut total = 0;
26 let mut i = 0;
27 let len = self.len();
28
29 while i < len {
30 total += self[i].memory_usage_const();
31 i += 1;
32 }
33
34 total
35 };
36}
37
38#[cfg(test)]
39mod tests {
40 use super::*;
41 use crate::MemoryUsageStatic as _;
42
43 #[test]
44 fn slice_usage() {
45 let str_size = usize::MEMORY_USAGE + <*const ()>::MEMORY_USAGE;
46
47 let slice = &[1u8, 2, 3, 4, 5] as &[_];
48
49 assert_eq!((*slice).memory_usage(), 5);
50 assert_eq!((*slice).memory_usage_const(), 5);
51
52 let slice = &["1", "12", "123"] as &[_];
53 let expected = (3 * str_size) + 1 + 2 + 3;
54
55 assert_eq!((*slice).memory_usage(), expected);
56 assert_eq!((*slice).memory_usage_const(), expected);
57 }
58}