pub struct Pager<'s, S: SyncResult> { /* private fields */ }Expand description
Tasks holding a Pager can remotely acquire a desired resource.
Pager contains a wait queue entry which forms an intrusive linked list. It is important that
the Pager is not moved while it is registered in a synchronization primitive, otherwise it
may lead to undefined behavior, therefore Pager does not implement Unpin.
Implementations§
Source§impl<'s, S: SyncResult> Pager<'s, S>
impl<'s, S: SyncResult> Pager<'s, S>
Sourcepub fn is_registered(self: &mut Pin<&mut Pager<'s, S>>) -> bool
pub fn is_registered(self: &mut Pin<&mut Pager<'s, S>>) -> bool
Returns true if the Pager is registered in a synchronization primitive.
§Examples
use std::pin::pin;
use saa::{Gate, Pager};
use saa::gate::State;
let gate = Gate::default();
let mut pinned_pager = pin!(Pager::default());
assert!(!pinned_pager.is_registered());
assert!(gate.register_pager(&mut pinned_pager, false));
assert!(pinned_pager.is_registered());
assert!(!gate.register_pager(&mut pinned_pager, false));
assert!(pinned_pager.is_registered());Sourcepub async fn poll_async(self: &mut Pin<&mut Pager<'s, S>>) -> S::Result
pub async fn poll_async(self: &mut Pin<&mut Pager<'s, S>>) -> S::Result
Waits for the desired resource to become available asynchronously.
§Examples
use std::pin::pin;
use saa::{Gate, Pager};
use saa::gate::State;
let gate = Gate::default();
let mut pinned_pager = pin!(Pager::default());
assert!(gate.register_pager(&mut pinned_pager, false));
assert_eq!(gate.open().1, 1);
async {
assert_eq!(pinned_pager.poll_async().await, Ok(State::Open));
};Sourcepub fn poll_sync(self: &mut Pin<&mut Pager<'s, S>>) -> S::Result
pub fn poll_sync(self: &mut Pin<&mut Pager<'s, S>>) -> S::Result
Waits for the desired resource to become available synchronously.
§Examples
use std::pin::pin;
use saa::{Gate, Pager};
use saa::gate::State;
let gate = Gate::default();
let mut pinned_pager = pin!(Pager::default());
assert!(gate.register_pager(&mut pinned_pager, true));
assert_eq!(gate.open().1, 1);
assert_eq!(pinned_pager.poll_sync(), Ok(State::Open));Sourcepub fn try_poll(self: &mut Pin<&mut Pager<'s, S>>) -> S::Result
pub fn try_poll(self: &mut Pin<&mut Pager<'s, S>>) -> S::Result
Tries to get the result.
§Examples
use std::pin::pin;
use saa::{Gate, Pager};
use saa::gate::{Error, State};
let gate = Gate::default();
let mut pinned_pager = pin!(Pager::default());
assert_eq!(pinned_pager.try_poll(), Err(Error::NotRegistered));
assert!(gate.register_pager(&mut pinned_pager, true));
assert_eq!(pinned_pager.try_poll(), Err(Error::NotReady));
assert_eq!(gate.open().1, 1);
assert_eq!(pinned_pager.try_poll(), Ok(State::Open));Trait Implementations§
Auto Trait Implementations§
impl<'s, S> !Freeze for Pager<'s, S>
impl<'s, S> !RefUnwindSafe for Pager<'s, S>
impl<'s, S> Send for Pager<'s, S>where
S: Sync,
impl<'s, S> !Sync for Pager<'s, S>
impl<'s, S> !Unpin for Pager<'s, S>
impl<'s, S> UnwindSafe for Pager<'s, S>where
S: RefUnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more