Skip to content

Commit

Permalink
refactor(runtime): use Reverse in BinaryHeap
Browse files Browse the repository at this point in the history
  • Loading branch information
Mivik committed May 1, 2024
1 parent 658b2c8 commit 7c2f5cc
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions compio-runtime/src/runtime/time.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use std::{
cmp::Reverse,
collections::BinaryHeap,
future::Future,
pin::Pin,
Expand Down Expand Up @@ -32,14 +33,14 @@ impl PartialOrd for TimerEntry {

impl Ord for TimerEntry {
fn cmp(&self, other: &Self) -> std::cmp::Ordering {
other.delay.cmp(&self.delay)
self.delay.cmp(&other.delay)
}
}

pub struct TimerRuntime {
time: Instant,
tasks: Slab<FutureState>,
wheel: BinaryHeap<TimerEntry>,
wheel: BinaryHeap<Reverse<TimerEntry>>,
}

impl TimerRuntime {
Expand All @@ -66,7 +67,7 @@ impl TimerRuntime {
let key = self.tasks.insert(FutureState::Active(None));
delay += elapsed;
let entry = TimerEntry { key, delay };
self.wheel.push(entry);
self.wheel.push(Reverse(entry));
Some(key)
}

Expand All @@ -83,8 +84,8 @@ impl TimerRuntime {
pub fn min_timeout(&self) -> Option<Duration> {
let elapsed = self.time.elapsed();
self.wheel.peek().map(|entry| {
if entry.delay > elapsed {
entry.delay - elapsed
if entry.0.delay > elapsed {
entry.0.delay - elapsed
} else {
Duration::ZERO
}
Expand All @@ -94,8 +95,8 @@ impl TimerRuntime {
pub fn wake(&mut self) {
let elapsed = self.time.elapsed();
while let Some(entry) = self.wheel.pop() {
if entry.delay <= elapsed {
if let Some(state) = self.tasks.get_mut(entry.key) {
if entry.0.delay <= elapsed {
if let Some(state) = self.tasks.get_mut(entry.0.key) {
let old_state = std::mem::replace(state, FutureState::Completed);
if let FutureState::Active(Some(waker)) = old_state {
waker.wake();
Expand Down

0 comments on commit 7c2f5cc

Please sign in to comment.