Skip to content

Commit 27dc1b6

Browse files
committed
Leverage filter function to simplify memory_areas implementation
1 parent c8f4501 commit 27dc1b6

File tree

1 file changed

+7
-26
lines changed

1 file changed

+7
-26
lines changed

src/memory_map.rs

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,15 @@ pub struct MemoryMapTag {
2222

2323
impl MemoryMapTag {
2424
/// Return an iterator over all AVAILABLE marked memory areas.
25-
pub fn memory_areas(&self) -> MemoryAreaIter {
26-
MemoryAreaIter {
27-
iter: self.all_memory_areas(),
28-
}
25+
pub fn memory_areas(&self) -> impl Iterator<Item = &MemoryArea> {
26+
self.all_memory_areas().filter(|entry| entry.typ == 1)
2927
}
28+
3029
/// Return an iterator over all marked memory areas.
31-
pub fn all_memory_areas(&self) -> AllMemoryAreaIter {
30+
pub fn all_memory_areas(&self) -> MemoryAreaIter {
3231
let self_ptr = self as *const MemoryMapTag;
3332
let start_area = (&self.first_area) as *const MemoryArea;
34-
AllMemoryAreaIter {
33+
MemoryAreaIter {
3534
current_area: start_area as u64,
3635
last_area: (self_ptr as u64 + (self.size - self.entry_size) as u64),
3736
entry_size: self.entry_size,
@@ -99,14 +98,14 @@ pub enum MemoryAreaType {
9998

10099
/// An iterator over all memory areas
101100
#[derive(Clone, Debug)]
102-
pub struct AllMemoryAreaIter<'a> {
101+
pub struct MemoryAreaIter<'a> {
103102
current_area: u64,
104103
last_area: u64,
105104
entry_size: u32,
106105
phantom: PhantomData<&'a MemoryArea>,
107106
}
108107

109-
impl<'a> Iterator for AllMemoryAreaIter<'a> {
108+
impl<'a> Iterator for MemoryAreaIter<'a> {
110109
type Item = &'a MemoryArea;
111110
fn next(&mut self) -> Option<&'a MemoryArea> {
112111
if self.current_area > self.last_area {
@@ -119,24 +118,6 @@ impl<'a> Iterator for AllMemoryAreaIter<'a> {
119118
}
120119
}
121120

122-
/// An iterator over Available memory areas.
123-
#[derive(Clone, Debug)]
124-
pub struct MemoryAreaIter<'a> {
125-
iter: AllMemoryAreaIter<'a>,
126-
}
127-
128-
impl<'a> Iterator for MemoryAreaIter<'a> {
129-
type Item = &'a MemoryArea;
130-
fn next(&mut self) -> Option<&'a MemoryArea> {
131-
let ret = self.iter.next()?;
132-
if ret.typ == 1 {
133-
Some(ret)
134-
} else {
135-
self.next()
136-
}
137-
}
138-
}
139-
140121
/// EFI memory map as per EFI specification.
141122
#[derive(Debug)]
142123
#[repr(C)]

0 commit comments

Comments
 (0)