From 31b60ae28e6aff6d23b378cd77e288c96c7db148 Mon Sep 17 00:00:00 2001 From: dyknon Date: Sun, 23 Feb 2025 08:33:02 +0900 Subject: abstruction --- src/sync.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/sync.rs (limited to 'src/sync.rs') diff --git a/src/sync.rs b/src/sync.rs new file mode 100644 index 0000000..08bcce3 --- /dev/null +++ b/src/sync.rs @@ -0,0 +1,30 @@ +use std::task::{Context, Poll, Waker}; + +pub struct Signal{ + waker: Option, + active: bool, +} +impl Signal{ + pub fn new() -> Self{ + Self{ + waker: None, + active: false, + } + } + pub fn wake(&mut self){ + self.active = true; + if let Some(w) = self.waker.take(){ + w.wake(); + } + } + pub fn poll(&mut self, ctx: &mut Context<'_>) -> Poll<()>{ + if self.active{ + self.active = false; + Poll::Ready(()) + }else{ + self.waker = Some(ctx.waker().clone()); + Poll::Pending + } + } +} + -- cgit v1.2.3