get_size2/impls/
sync_impls.rs1use std::cell::RefCell;
2use std::sync::{Mutex, OnceLock, RwLock};
3
4use crate::{GetSize, GetSizeTracker};
5
6impl<T> GetSize for Mutex<T>
7where
8 T: GetSize,
9{
10 fn get_heap_size_with_tracker<Tr: GetSizeTracker>(&self, tracker: Tr) -> (usize, Tr) {
11 let guard = self
13 .lock()
14 .unwrap_or_else(std::sync::PoisonError::into_inner);
15 T::get_heap_size_with_tracker(&*guard, tracker)
16 }
17}
18
19impl<T> GetSize for RwLock<T>
20where
21 T: GetSize,
22{
23 fn get_heap_size_with_tracker<Tr: GetSizeTracker>(&self, tracker: Tr) -> (usize, Tr) {
24 let guard = self
26 .read()
27 .unwrap_or_else(std::sync::PoisonError::into_inner);
28 T::get_heap_size_with_tracker(&*guard, tracker)
29 }
30}
31
32impl<T> GetSize for RefCell<T>
33where
34 T: GetSize,
35{
36 fn get_heap_size_with_tracker<Tr: GetSizeTracker>(&self, tracker: Tr) -> (usize, Tr) {
37 match self.try_borrow() {
40 Ok(borrowed) => T::get_heap_size_with_tracker(&*borrowed, tracker),
41 Err(_) => {
42 (0, tracker)
45 }
46 }
47 }
48}
49
50impl<T> GetSize for OnceLock<T>
51where
52 T: GetSize,
53{
54 fn get_heap_size_with_tracker<Tr: GetSizeTracker>(&self, tracker: Tr) -> (usize, Tr) {
55 match self.get() {
57 None => (0, tracker),
58 Some(value) => T::get_heap_size_with_tracker(value, tracker),
59 }
60 }
61}