use crate::Node;
use super::Parser;
pub type InnerNodeHandle = u32;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(transparent)]
pub struct NodeHandle(InnerNodeHandle);
impl NodeHandle {
#[inline]
pub fn new(node: InnerNodeHandle) -> Self {
NodeHandle(node)
}
pub fn get<
'p,
'buf,
const MAX_NODES: usize,
const MAX_STACK: usize,
const MAX_ROOTS: usize,
const MAX_IDS: usize,
const MAX_CLASSES: usize,
const MAX_SELECTOR_NODES: usize,
>(
&self,
parser: &'p Parser<
'buf,
MAX_NODES,
MAX_STACK,
MAX_ROOTS,
MAX_IDS,
MAX_CLASSES,
MAX_SELECTOR_NODES,
>,
) -> Option<&'p Node<'buf>> {
parser.resolve_node_id(self.0)
}
pub fn get_mut<
'p,
'buf,
const MAX_NODES: usize,
const MAX_STACK: usize,
const MAX_ROOTS: usize,
const MAX_IDS: usize,
const MAX_CLASSES: usize,
const MAX_SELECTOR_NODES: usize,
>(
&self,
parser: &'p mut Parser<
'buf,
MAX_NODES,
MAX_STACK,
MAX_ROOTS,
MAX_IDS,
MAX_CLASSES,
MAX_SELECTOR_NODES,
>,
) -> Option<&'p mut Node<'buf>> {
parser.resolve_node_id_mut(self.0)
}
#[inline]
pub fn get_inner(&self) -> InnerNodeHandle {
self.0
}
}