fdt_raw/node/prop/
ranges.rs1use 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}