get_size2/impls/
ranges.rs1use std::ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo, RangeToInclusive};
2
3use crate::{GetSize, GetSizeTracker};
4
5macro_rules! impl_sum_of_fields {
7 ($name:ident, $($field:ident),+) => {
8 impl<I: GetSize> GetSize for $name<I> {
9 #[allow(unused_mut, reason = "the macro supports a variadic number of elements")]
10 #[expect(clippy::allow_attributes, reason = "the macro supports a variadic number of elements")]
11 fn get_heap_size_with_tracker<Tr: GetSizeTracker>(&self, mut tracker: Tr) -> (usize, Tr) {
12 let mut size = 0;
13 let mut elem_size;
14
15 $(
16 (elem_size, tracker) = self.$field.get_heap_size_with_tracker(tracker);
17 size += elem_size;
18 )+
19
20 (size, tracker)
21 }
22 }
23 };
24}
25
26impl_sum_of_fields!(Range, start, end);
27impl_sum_of_fields!(RangeFrom, start);
28impl_sum_of_fields!(RangeTo, end);
29impl_sum_of_fields!(RangeToInclusive, end);
30
31impl GetSize for RangeFull {}
32
33impl<I: GetSize> GetSize for RangeInclusive<I> {
34 #[inline]
35 fn get_heap_size_with_tracker<Tr: GetSizeTracker>(&self, tracker: Tr) -> (usize, Tr) {
36 let (start_size, tracker) = (*self.start()).get_heap_size_with_tracker(tracker);
37 let (end_size, tracker) = (*self.end()).get_heap_size_with_tracker(tracker);
38 (start_size + end_size, tracker)
39 }
40}