get_size2/impls/alloc_impls/
strings.rs1use alloc::boxed::Box;
2use alloc::ffi::CString;
3use alloc::rc::Rc;
4use alloc::string::String;
5#[cfg(target_has_atomic = "ptr")]
7use alloc::sync::Arc;
8
9use crate::{GetSize, GetSizeTracker};
10
11impl GetSize for String {
12 fn get_heap_size_with_tracker<T: GetSizeTracker>(&self, tracker: T) -> (usize, T) {
13 (self.capacity(), tracker)
14 }
15}
16
17impl GetSize for CString {
18 fn get_heap_size_with_tracker<T: GetSizeTracker>(&self, tracker: T) -> (usize, T) {
19 (self.as_bytes_with_nul().len(), tracker)
20 }
21}
22
23impl GetSize for Box<str> {
24 fn get_heap_size_with_tracker<T: GetSizeTracker>(&self, tracker: T) -> (usize, T) {
25 (self.len(), tracker)
26 }
27}
28
29impl GetSize for Rc<str> {
30 fn get_heap_size_with_tracker<T: GetSizeTracker>(&self, mut tracker: T) -> (usize, T) {
31 if !tracker.track(Self::as_ptr(self).cast::<()>()) {
32 return (0, tracker);
33 }
34
35 (self.len(), tracker)
36 }
37}
38
39#[cfg(target_has_atomic = "ptr")]
40impl GetSize for Arc<str> {
41 fn get_heap_size_with_tracker<T: GetSizeTracker>(&self, mut tracker: T) -> (usize, T) {
42 if !tracker.track(Self::as_ptr(self).cast::<()>()) {
43 return (0, tracker);
44 }
45
46 (self.len(), tracker)
47 }
48}