use crate::platform::*;
use crate::{Priority, TaskId};
pub struct TaskWrapper<T> {
inner: Option<T>,
task_id: Option<TaskId>,
priority: Priority,
creation_time: Instant,
reset_count: usize,
}
impl<T> Default for TaskWrapper<T> {
fn default() -> Self {
Self {
inner: None,
task_id: None,
priority: Priority::Normal,
creation_time: Instant::now(),
reset_count: 0,
}
}
}
impl<T> TaskWrapper<T> {
#[must_use]
pub fn new() -> Self {
Self {
inner: None,
task_id: None,
priority: Priority::Normal,
creation_time: Instant::now(),
reset_count: 0,
}
}
pub fn init(&mut self, task: T, task_id: TaskId, priority: Priority) {
self.inner = Some(task);
self.task_id = Some(task_id);
self.priority = priority;
self.creation_time = Instant::now();
}
pub fn reset(&mut self) {
self.inner = None;
self.task_id = None;
self.priority = Priority::Normal;
self.creation_time = Instant::now();
self.reset_count += 1;
}
pub fn take(&mut self) -> Option<T> {
self.inner.take()
}
pub fn task_id(&self) -> Option<TaskId> {
self.task_id
}
pub fn priority(&self) -> Priority {
self.priority
}
pub fn age(&self) -> Duration {
self.creation_time.elapsed()
}
pub fn reset_count(&self) -> usize {
self.reset_count
}
}