Skip to main content

get_size2/impls/
ranges.rs

1use std::ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo, RangeToInclusive};
2
3use crate::{GetSize, GetSizeTracker};
4
5/// Helper macro used to sum the heap sizes of specific fields.
6macro_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}