Skip to main content

mlt_core/encoder/
analyze.rs

1#[cfg(any(test, feature = "__private"))]
2use crate::decoder::StreamMeta;
3use crate::decoder::{ParsedScalar, ParsedSharedDict, ParsedStrings};
4#[cfg(any(test, feature = "__private"))]
5use crate::encoder::EncodedStream;
6use crate::{Analyze, StatType};
7
8#[cfg(any(test, feature = "__private"))]
9impl Analyze for EncodedStream {
10    fn for_each_stream(&self, cb: &mut dyn FnMut(StreamMeta)) {
11        cb(self.meta);
12    }
13}
14
15impl<T: Analyze + Copy + PartialEq> Analyze for ParsedScalar<'_, T> {
16    fn collect_statistic(&self, stat: StatType) -> usize {
17        let meta = if stat == StatType::DecodedMetaSize {
18            self.name.len()
19        } else {
20            0
21        };
22        meta + self.presence.collect_statistic(stat)
23    }
24}
25
26impl Analyze for ParsedSharedDict<'_> {
27    fn collect_statistic(&self, stat: StatType) -> usize {
28        let meta = if stat == StatType::DecodedMetaSize {
29            self.prefix.len() + self.items.iter().map(|v| v.suffix.len()).sum::<usize>()
30        } else {
31            0
32        };
33        meta + self.data.len()
34    }
35}
36
37impl Analyze for ParsedStrings<'_> {
38    fn collect_statistic(&self, stat: StatType) -> usize {
39        let meta = if stat == StatType::DecodedMetaSize {
40            self.name.len()
41        } else {
42            0
43        };
44        meta + self.dense_values().collect_statistic(stat)
45    }
46}