#![allow(clippy::missing_safety_doc)]
use std::ffi::c_void;
use crate::graph::{Graph, Poller, State};
use crate::runtime;
use crate::status::Error;
use super::*;
mod diagnostics;
mod input_poller;
mod lifecycle;
mod observer;
pub use diagnostics::*;
pub use input_poller::*;
pub use lifecycle::*;
pub use observer::*;
#[derive(Default)]
pub struct GraphSlot {
graph: Option<Graph>,
}
unsafe fn slot_mut<'a>(g: *mut LMFlowGraph) -> Option<&'a mut GraphSlot> {
if g.is_null() {
None
} else {
Some(&mut *(g as *mut GraphSlot))
}
}
unsafe fn with_graph<F: FnOnce(&Graph) -> i32>(g: *mut LMFlowGraph, f: F) -> i32 {
match slot_mut(g).and_then(|s| s.graph.as_ref()) {
Some(gr) => f(gr),
None => fail(Error::State("graph not yet initialized".into())),
}
}
pub(super) unsafe fn graph_of<'a>(g: *mut LMFlowGraph) -> Option<&'a Graph> {
slot_mut(g).and_then(|s| s.graph.as_ref())
}