All checks were successful
continuous-integration/drone/push Build is passing
Signed-off-by: Julien CLEMENT <julien.clement@epita.fr>
38 lines
821 B
Rust
38 lines
821 B
Rust
use alloc::boxed::Box;
|
|
use core::future::Future;
|
|
use core::pin::Pin;
|
|
use core::sync::atomic::{AtomicU64, Ordering};
|
|
use core::task::{Context, Poll};
|
|
|
|
pub mod executor;
|
|
pub mod keyboard;
|
|
pub mod spawner;
|
|
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
|
|
struct TaskId(u64);
|
|
|
|
impl TaskId {
|
|
fn new() -> Self {
|
|
static NEXT_ID: AtomicU64 = AtomicU64::new(0);
|
|
TaskId(NEXT_ID.fetch_add(1, Ordering::Relaxed))
|
|
}
|
|
}
|
|
|
|
pub struct Task {
|
|
id: TaskId,
|
|
future: Pin<Box<dyn Future<Output = ()>>>,
|
|
}
|
|
|
|
impl Task {
|
|
pub fn new(future: impl Future<Output = ()> + 'static) -> Task {
|
|
Task {
|
|
id: TaskId::new(),
|
|
future: Box::pin(future),
|
|
}
|
|
}
|
|
|
|
fn poll(&mut self, context: &mut Context) -> Poll<()> {
|
|
self.future.as_mut().poll(context)
|
|
}
|
|
}
|