1use crate::{
2 Result,
3 blocks::read_string_block,
4 channel::Channel,
5 parsing::{RawChannelGroup, RawDataGroup, SourceInfo},
6};
7
8pub struct ChannelGroup<'a> {
13 raw_data_group: &'a RawDataGroup,
14 raw_channel_group: &'a RawChannelGroup,
15 mmap: &'a [u8],
16}
17
18impl<'a> ChannelGroup<'a> {
19 pub fn new(
29 raw_data_group: &'a RawDataGroup,
30 raw_channel_group: &'a RawChannelGroup,
31 mmap: &'a [u8],
32 ) -> Self {
33 ChannelGroup {
34 raw_data_group,
35 raw_channel_group,
36 mmap,
37 }
38 }
39
40 pub fn name(&self) -> Result<Option<String>> {
42 read_string_block(self.mmap, self.raw_channel_group.block.acq_name_addr)
43 }
44
45 pub fn comment(&self) -> Result<Option<String>> {
47 read_string_block(self.mmap, self.raw_channel_group.block.comment_addr)
48 }
49
50 pub fn source(&self) -> Result<Option<SourceInfo>> {
52 let addr = self.raw_channel_group.block.acq_source_addr;
53 SourceInfo::from_mmap(self.mmap, addr)
54 }
55
56 pub fn channels(&self) -> Vec<Channel<'a>> {
61 let mut channels = Vec::new();
62 for raw_channel in &self.raw_channel_group.raw_channels {
63 let channel = Channel::new(
64 &raw_channel.block,
65 self.raw_data_group,
66 self.raw_channel_group,
67 raw_channel,
68 self.mmap,
69 );
70 channels.push(channel);
71 }
72
73 channels
74 }
75
76 pub fn raw_data_group(&self) -> &RawDataGroup {
78 self.raw_data_group
79 }
80
81 pub fn raw_channel_group(&self) -> &RawChannelGroup {
83 self.raw_channel_group
84 }
85
86 pub fn mmap(&self) -> &[u8] {
88 self.mmap
89 }
90}