use core::ptr;
use crate::bindings::{ngx_rbtree_insert_pt, ngx_rbtree_node_t, ngx_rbtree_t};
#[macro_export]
macro_rules! ngx_rbtree_data {
($node:expr, $type:path, $link:ident) => {
$node
.byte_sub(::core::mem::offset_of!($type, $link))
.cast::<$type>()
};
}
pub unsafe fn ngx_rbtree_init(
tree: *mut ngx_rbtree_t,
sentinel: *mut ngx_rbtree_node_t,
insert: ngx_rbtree_insert_pt,
) {
ngx_rbtree_sentinel_init(sentinel);
(*tree).root = sentinel;
(*tree).sentinel = sentinel;
(*tree).insert = insert;
}
#[inline]
pub unsafe fn ngx_rbt_red(node: *mut ngx_rbtree_node_t) {
(*node).color = 1
}
#[inline]
pub unsafe fn ngx_rbt_black(node: *mut ngx_rbtree_node_t) {
(*node).color = 0
}
#[inline]
pub unsafe fn ngx_rbtree_sentinel_init(node: *mut ngx_rbtree_node_t) {
ngx_rbt_black(node)
}
#[inline]
pub unsafe fn ngx_rbtree_min(
mut node: *mut ngx_rbtree_node_t,
sentinel: *mut ngx_rbtree_node_t,
) -> *mut ngx_rbtree_node_t {
while !ptr::addr_eq((*node).left, sentinel) {
node = (*node).left;
}
node
}