pack_it/
mem.rs

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}