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) {
|
pub fn reserve(&mut self, start: PhysAddr, size: usize) {
|
||||||
// NOTE: only support inclusive range
|
// NOTE: only support inclusive range
|
||||||
if let Some((region, _)) =
|
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_start = region.start_addr();
|
||||||
let region_end = region.end_addr();
|
let region_end = region.end_addr();
|
||||||
|
@ -1,22 +1,42 @@
|
|||||||
pub trait Then {
|
pub trait Then {
|
||||||
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>;
|
||||||
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>;
|
||||||
|
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 {
|
impl Then for bool {
|
||||||
#[inline]
|
#[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 {
|
if self {
|
||||||
f()
|
Ok(ok)
|
||||||
} else {
|
} else {
|
||||||
Err(err)
|
Err(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[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 {
|
if self {
|
||||||
Ok(f())
|
Ok(ok)
|
||||||
} else {
|
} else {
|
||||||
Err(err)
|
Err(err)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user