mirror of
https://github.com/panpaul/tiny_os
synced 2024-09-20 09:45:19 +08:00
feat: rewrite then methods
This commit is contained in:
parent
5c1e73a4ee
commit
25982b5a33
@ -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();
|
||||
|
@ -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)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user