1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#![doc = include_str!("../README.md")]

mod mutex;
mod rw_lock;

use c_map::HashMap;

use std::{
    future::Future,
    hash::Hash,
    pin::Pin,
    task::Waker,
    task::{Context, Poll},
};

pub use mutex::{Mutex, MutexGuard};
pub use rw_lock::{ReadGuard, RwLock};

pub(crate) enum PollState {
    Init,
    Pending,
    Ready,
}

macro_rules! ret_fut {
    ($state: expr, $body: block) => {
        match $state {
            PollState::Init => {
                $body;
                $state = PollState::Pending;
            }
            PollState::Ready => return Poll::Ready(()),
            _ => {}
        };
        return Poll::Pending;
    };
}
pub(crate) use ret_fut;