base/
tasks.rs

1pub struct Task {
2   pub id: TaskId,
3   pub future: Pin<Unique<dyn Future<Output = ()>>>,
4}
5
6impl Task {
7   pub fn new(future: impl Future<Output = ()> + 'static) -> Task {
8      return Task{
9         id: TaskId::new(),
10         future: Unique::pin(future),
11      };
12   }
13
14   pub fn poll(&mut self, context: &mut Context) -> Poll<()> {
15      return self.future.as_mut().poll(context);
16   }
17}
18
19#[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord)]
20pub struct TaskId(pub u64);
21
22impl TaskId {
23   pub fn new() -> Self {
24      static NEXT_ID: AtomicU64 = AtomicU64::new(0);
25      TaskId(NEXT_ID.fetch_add(1, Ordering::Relaxed))
26   }
27}
28
29// MODULES //
30
31pub mod executor;
32pub mod keyboard;
33
34// IMPORTS //
35
36use {
37   crate::pointer::Unique,
38   core::{
39      future::Future,
40      pin::Pin,
41      sync::atomic::{AtomicU64, Ordering},
42      task::{Context, Poll},
43   },
44};
45
46// EXPORTS //