Skip to main content

wiwi_memory_usage/impls/
option.rs

1use crate::MemoryUsage;
2use crate::macros::impl_memory_usage;
3
4impl_memory_usage! {
5	{ T: MemoryUsage }
6	{ T: [const] MemoryUsage }
7	Option<T>
8	|self| match self {
9		Some(val) => {
10			let remaining = size_of::<Option<T>>() - size_of::<T>();
11			val.memory_usage() + remaining
12		}
13		None => { size_of::<Option<T>>() }
14	};
15	compacted |self| match self {
16		Some(val) => { val.memory_usage_compacted() }
17		None => { 0 }
18	};
19	compact |self| match self {
20		Some(val) => { val.compact_memory() }
21		None => { 0 }
22	};
23	ref compacted |self| match self {
24		Some(val) => { val.memory_usage_compacted_ref() }
25		None => { 0 }
26	};
27	ref compact |self| match self {
28		Some(val) => { val.compact_memory_ref() }
29		None => { 0 }
30	};
31}
32
33// Option can't be MemoryUsageStatic because it might or might not have a value
34// with indirect memory (ex. Option<&usize>, &usize is MemoryUsageStatic, but
35// Option could be either Some (2 * size_of::<usize>()) or None (size_of::<usize>()))