1use arrow2::array::{
2 MutableArray, MutableBooleanArray, MutableFixedSizeBinaryArray, MutablePrimitiveArray,
3 MutableUtf8Array,
4};
5use arrow2::bitmap::MutableBitmap;
6use arrow2::offset::Offsets;
7use arrow2::types::NativeType;
8use arrow2::types::Offset;
9use std::mem;
10
11pub trait MemUsage {
12 fn mem_usage(&self) -> usize;
13}
14
15impl<T: NativeType> MemUsage for Vec<T> {
16 #[inline]
17 fn mem_usage(&self) -> usize {
18 self.len() * mem::size_of::<T>()
19 }
20}
21
22impl MemUsage for MutableBitmap {
23 fn mem_usage(&self) -> usize {
24 self.len() / 8
25 }
26}
27
28impl MemUsage for Option<&MutableBitmap> {
29 fn mem_usage(&self) -> usize {
30 self.map(|v| v.mem_usage()).unwrap_or(0)
31 }
32}
33
34impl MemUsage for MutableFixedSizeBinaryArray {
35 fn mem_usage(&self) -> usize {
36 self.values().mem_usage()
37 }
38}
39
40impl<O: Offset> MemUsage for MutableUtf8Array<O> {
41 fn mem_usage(&self) -> usize {
42 self.validity().mem_usage() + self.values().mem_usage() + self.offsets().mem_usage()
43 }
44}
45
46impl<T: NativeType> MemUsage for MutablePrimitiveArray<T> {
47 fn mem_usage(&self) -> usize {
48 self.validity().mem_usage() + self.values().mem_usage()
49 }
50}
51
52impl MemUsage for MutableBooleanArray {
53 fn mem_usage(&self) -> usize {
54 self.validity().mem_usage() + self.values().mem_usage()
55 }
56}
57
58impl<O: Offset> MemUsage for Offsets<O> {
59 fn mem_usage(&self) -> usize {
60 self.len() * mem::size_of::<O>()
61 }
62}