feat: rewrite then methods

This commit is contained in:
Paul Pan 2024-04-22 01:01:22 +08:00
parent 5c1e73a4ee
commit 25982b5a33
2 changed files with 27 additions and 7 deletions

View File

@ -119,7 +119,7 @@ impl FreeList {
pub fn reserve(&mut self, start: PhysAddr, size: usize) {
// NOTE: only support inclusive range
if let Some((region, _)) =
self.alloc_node(|region| (region.start_addr() <= start && start < region.end_addr()).some(|| (), ()))
self.alloc_node(|region| (region.start_addr() <= start && start < region.end_addr()).then_ok((), ()))
{
let region_start = region.start_addr();
let region_end = region.end_addr();

View File

@ -1,22 +1,42 @@
pub trait Then {
fn and<T, E, F: FnOnce() -> Result<T, E>>(self, f: F, err: E) -> Result<T, E>;
fn some<T, E, F: FnOnce() -> T>(self, f: F, err: E) -> Result<T, E>;
fn then_ok<T, E>(self, ok: T, err: E) -> Result<T, E>;
fn then_err<T, E>(self, ok: T, err: E) -> Result<T, E>;
fn else_ok<T, E>(self, ok: T, err: E) -> Result<T, E>;
fn else_err<T, E>(self, ok: T, err: E) -> Result<T, E>;
}
impl Then for bool {
#[inline]
fn and<T, E, F: FnOnce() -> Result<T, E>>(self, f: F, err: E) -> Result<T, E> {
fn then_ok<T, E>(self, ok: T, err: E) -> Result<T, E> {
if self {
f()
Ok(ok)
} else {
Err(err)
}
}
#[inline]
fn some<T, E, F: FnOnce() -> T>(self, f: F, err: E) -> Result<T, E> {
fn then_err<T, E>(self, ok: T, err: E) -> Result<T, E> {
if !self {
Ok(ok)
} else {
Err(err)
}
}
#[inline]
fn else_ok<T, E>(self, ok: T, err: E) -> Result<T, E> {
if !self {
Ok(ok)
} else {
Err(err)
}
}
#[inline]
fn else_err<T, E>(self, ok: T, err: E) -> Result<T, E> {
if self {
Ok(f())
Ok(ok)
} else {
Err(err)
}