use std::cell::RefCell;
use std::num::NonZeroUsize;
use std::sync::Arc;
use heph::actor_ref::ActorGroup;
use mio::Poll;
use crate::{shared, trace, Signal};
mod scheduler;
mod timers;
pub(super) mod waker;
use scheduler::Scheduler;
use timers::Timers;
use waker::WakerId;
#[derive(Debug)]
pub(super) struct RuntimeInternals {
pub(super) id: NonZeroUsize,
pub(super) shared: Arc<shared::RuntimeInternals>,
pub(super) waker_id: WakerId,
pub(super) scheduler: RefCell<Scheduler>,
pub(super) poll: RefCell<Poll>,
pub(crate) timers: RefCell<Timers>,
pub(super) signal_receivers: RefCell<ActorGroup<Signal>>,
pub(super) cpu: Option<usize>,
pub(super) trace_log: RefCell<Option<trace::Log>>,
}
impl RuntimeInternals {
pub(super) fn new(
id: NonZeroUsize,
shared_internals: Arc<shared::RuntimeInternals>,
waker_id: WakerId,
poll: Poll,
cpu: Option<usize>,
trace_log: Option<trace::Log>,
) -> RuntimeInternals {
RuntimeInternals {
id,
shared: shared_internals,
waker_id,
scheduler: RefCell::new(Scheduler::new()),
poll: RefCell::new(poll),
timers: RefCell::new(Timers::new()),
signal_receivers: RefCell::new(ActorGroup::empty()),
cpu,
trace_log: RefCell::new(trace_log),
}
}
}