Skip to content

Commit b7ffa62

Browse files
committed
address filter as builder
1 parent 54845d9 commit b7ffa62

File tree

1 file changed

+49
-37
lines changed

1 file changed

+49
-37
lines changed

src/config/filter.rs

Lines changed: 49 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ mod test {
99

1010
#[test]
1111
fn test_addrfilter() {
12-
let mut filter = AddrFilter::new();
13-
filter.set_addr0(AddrRange::new(1, 2, AddrConfig::DISABLED));
14-
filter.set_addr1(AddrRange::new(3, 4, AddrConfig::FILTER));
15-
filter.set_addr2(AddrRange::new(5, 6, AddrConfig::STOP));
16-
filter.set_addr3(AddrRange::new(7, 8, AddrConfig::DISABLED));
12+
let mut filter = AddrFilterBuilder::new()
13+
.addr0(AddrRange::new(1, 2, AddrConfig::DISABLED))
14+
.addr1(AddrRange::new(3, 4, AddrConfig::FILTER))
15+
.addr2(AddrRange::new(5, 6, AddrConfig::STOP))
16+
.addr3(AddrRange::new(7, 8, AddrConfig::DISABLED))
17+
.finish();
1718

1819
assert_eq!(filter.addr0().a(), 1);
1920
assert_eq!(filter.addr0().b(), 2);
@@ -75,43 +76,11 @@ impl AddrRange {
7576
pub fn set_cfg(&mut self, cfg: AddrConfig) { self.cfg = cfg }
7677
}
7778

78-
// could've written a macro, i know
79-
// but its just like 4 variables i think its fine
8079

8180
/// the address filter configuration
8281
#[derive(Clone, Copy)]
8382
pub struct AddrFilter (pub(super) pt_conf_addr_filter);
8483
impl AddrFilter {
85-
pub fn new() -> Self { unsafe { mem::zeroed() }}
86-
87-
#[inline]
88-
pub fn set_addr0(&mut self, range: AddrRange) {
89-
self.0.addr0_a = range.a;
90-
self.0.addr0_b = range.b;
91-
unsafe { self.0.config.ctl.set_addr0_cfg(range.cfg as u32) };
92-
}
93-
94-
#[inline]
95-
pub fn set_addr1(&mut self, range: AddrRange) {
96-
self.0.addr1_a = range.a;
97-
self.0.addr1_b = range.b;
98-
unsafe { self.0.config.ctl.set_addr1_cfg(range.cfg as u32) };
99-
}
100-
101-
#[inline]
102-
pub fn set_addr2(&mut self, range: AddrRange) {
103-
self.0.addr2_a = range.a;
104-
self.0.addr2_b = range.b;
105-
unsafe { self.0.config.ctl.set_addr2_cfg(range.cfg as u32) };
106-
}
107-
108-
#[inline]
109-
pub fn set_addr3(&mut self, range: AddrRange) {
110-
self.0.addr3_a = range.a;
111-
self.0.addr3_b = range.b;
112-
unsafe { self.0.config.ctl.set_addr3_cfg(range.cfg as u32) };
113-
}
114-
11584
#[inline]
11685
pub fn addr0(&self) -> AddrRange {
11786
unsafe {
@@ -143,4 +112,47 @@ impl AddrFilter {
143112
AddrConfig::try_from(self.0.config.ctl.addr3_cfg()).unwrap())
144113
}
145114
}
115+
}
116+
117+
pub struct AddrFilterBuilder (pub(super) pt_conf_addr_filter);
118+
impl AddrFilterBuilder {
119+
pub fn new() -> Self { unsafe { mem::zeroed() }}
120+
121+
#[inline]
122+
pub fn addr0(&mut self, range: AddrRange) -> &mut Self {
123+
self.0.addr0_a = range.a;
124+
self.0.addr0_b = range.b;
125+
unsafe { self.0.config.ctl.set_addr0_cfg(range.cfg as u32) };
126+
127+
self
128+
}
129+
130+
#[inline]
131+
pub fn addr1(&mut self, range: AddrRange) -> &mut Self {
132+
self.0.addr1_a = range.a;
133+
self.0.addr1_b = range.b;
134+
unsafe { self.0.config.ctl.set_addr1_cfg(range.cfg as u32) };
135+
136+
self
137+
}
138+
139+
#[inline]
140+
pub fn addr2(&mut self, range: AddrRange) -> &mut Self {
141+
self.0.addr2_a = range.a;
142+
self.0.addr2_b = range.b;
143+
unsafe { self.0.config.ctl.set_addr2_cfg(range.cfg as u32) };
144+
145+
self
146+
}
147+
148+
#[inline]
149+
pub fn addr3(&mut self, range: AddrRange) -> &mut Self {
150+
self.0.addr3_a = range.a;
151+
self.0.addr3_b = range.b;
152+
unsafe { self.0.config.ctl.set_addr3_cfg(range.cfg as u32) };
153+
154+
self
155+
}
156+
157+
pub fn finish(&self) -> AddrFilter { AddrFilter(self.0) }
146158
}

0 commit comments

Comments
 (0)