fdt_raw/node/prop/
ranges.rs

1use crate::data::{Bytes, Reader};
2
3#[derive(Clone)]
4pub struct VecRange<'a> {
5    address_cells: usize,
6    parent_address_cells: usize,
7    size_cells: usize,
8    data: Bytes<'a>,
9}
10
11impl<'a> VecRange<'a> {
12    pub(crate) fn new(
13        address_cells: usize,
14        parent_address_cells: usize,
15        size_cells: usize,
16        data: Bytes<'a>,
17    ) -> Self {
18        Self {
19            address_cells,
20            parent_address_cells,
21            size_cells,
22            data,
23        }
24    }
25
26    pub fn iter(&self) -> VecRangeIter<'a> {
27        VecRangeIter {
28            address_cells: self.address_cells,
29            parent_address_cells: self.parent_address_cells,
30            size_cells: self.size_cells,
31            reader: self.data.reader(),
32        }
33    }
34}
35
36#[derive(Debug, Clone)]
37pub struct RangeInfo {
38    pub child_address: u64,
39    pub parent_address: u64,
40    pub length: u64,
41}
42
43pub struct VecRangeIter<'a> {
44    address_cells: usize,
45    parent_address_cells: usize,
46    size_cells: usize,
47    reader: Reader<'a>,
48}
49
50impl<'a> Iterator for VecRangeIter<'a> {
51    type Item = RangeInfo;
52
53    fn next(&mut self) -> Option<Self::Item> {
54        let child_address = self.reader.read_cells(self.address_cells)?;
55        let parent_address = self.reader.read_cells(self.parent_address_cells)?;
56        let length = self.reader.read_cells(self.size_cells)?;
57
58        Some(RangeInfo {
59            child_address,
60            parent_address,
61            length,
62        })
63    }
64}