JuliOS/src/task/mod.rs
Julien CLEMENT 88fd29ea1a
All checks were successful
continuous-integration/drone/push Build is passing
No idea how to do a spawner
Signed-off-by: Julien CLEMENT <julien.clement@epita.fr>
2023-01-02 22:38:17 +01:00

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)
}
}