fpm_rs/measurements/
read.rs1use std::{ops::Deref, sync::Arc};
2
3use crate::Result;
4
5use super::{FrameMetadata, LazyMeasurementStack, MeasurementStack};
6
7pub trait MeasurementRead: Sync {
13 fn frame_count(&self) -> usize;
14
15 fn image_shape(&self) -> (usize, usize);
16
17 fn frame_len(&self) -> usize;
18
19 fn frame(&self, index: usize) -> Result<impl Deref<Target = [f64]> + '_>;
20
21 fn frame_weight(&self, index: usize) -> Result<f64>;
22
23 fn frame_mask(&self, index: usize) -> Result<Option<&[u8]>>;
24
25 fn frame_metadata(&self) -> &[FrameMetadata];
26
27 fn validate(&self) -> Result<()>;
28}
29
30impl MeasurementRead for MeasurementStack {
31 fn frame_count(&self) -> usize {
32 MeasurementStack::frame_count(self)
33 }
34
35 fn image_shape(&self) -> (usize, usize) {
36 MeasurementStack::image_shape(self)
37 }
38
39 fn frame_len(&self) -> usize {
40 MeasurementStack::frame_len(self)
41 }
42
43 fn frame(&self, index: usize) -> Result<impl Deref<Target = [f64]> + '_> {
44 MeasurementStack::frame(self, index)
45 }
46
47 fn frame_weight(&self, index: usize) -> Result<f64> {
48 MeasurementStack::frame_weight(self, index)
49 }
50
51 fn frame_mask(&self, index: usize) -> Result<Option<&[u8]>> {
52 MeasurementStack::frame_mask(self, index)
53 }
54
55 fn frame_metadata(&self) -> &[FrameMetadata] {
56 &self.frame_metadata
57 }
58
59 fn validate(&self) -> Result<()> {
60 MeasurementStack::validate(self)
61 }
62}
63
64struct SharedFrame(Arc<Vec<f64>>);
65
66impl Deref for SharedFrame {
67 type Target = [f64];
68
69 fn deref(&self) -> &Self::Target {
70 self.0.as_slice()
71 }
72}
73
74impl MeasurementRead for LazyMeasurementStack {
75 fn frame_count(&self) -> usize {
76 LazyMeasurementStack::frame_count(self)
77 }
78
79 fn image_shape(&self) -> (usize, usize) {
80 LazyMeasurementStack::image_shape(self)
81 }
82
83 fn frame_len(&self) -> usize {
84 LazyMeasurementStack::frame_len(self)
85 }
86
87 fn frame(&self, index: usize) -> Result<impl Deref<Target = [f64]> + '_> {
88 LazyMeasurementStack::frame(self, index).map(SharedFrame)
89 }
90
91 fn frame_weight(&self, index: usize) -> Result<f64> {
92 LazyMeasurementStack::frame_weight(self, index)
93 }
94
95 fn frame_mask(&self, index: usize) -> Result<Option<&[u8]>> {
96 LazyMeasurementStack::frame_mask(self, index)
97 }
98
99 fn frame_metadata(&self) -> &[FrameMetadata] {
100 LazyMeasurementStack::frame_metadata(self)
101 }
102
103 fn validate(&self) -> Result<()> {
104 LazyMeasurementStack::validate(self)
105 }
106}