static void list_insert(uu_list_t *lp, uu_list_node_impl_t *np, uu_list_node_impl_t *prev, uu_list_node_impl_t *next) { if (lp->ul_debug) { if (next->uln_prev != prev || prev->uln_next != next) uu_panic("insert(%p): internal error: %p and %p not " "neighbors\n", (void *)lp, (void *)next, (void *)prev); if (np->uln_next != POOL_TO_MARKER(lp->ul_pool) || np->uln_prev != NULL) { uu_panic("insert(%p): elem %p node %p corrupt, " "not initialized, or already in a list.\n", (void *)lp, NODE_TO_ELEM(lp, np), (void *)np); } /* * invalidate outstanding uu_list_index_ts. */ lp->ul_index = INDEX_NEXT(lp->ul_index); } np->uln_next = next; np->uln_prev = prev; next->uln_prev = np; prev->uln_next = np; lp->ul_numnodes++; }
void uu_avl_node_fini(void *base, uu_avl_node_t *np, uu_avl_pool_t *pp) { uintptr_t *na = (uintptr_t *)np; if (pp->uap_debug) { if (na[0] == DEAD_MARKER && na[1] == DEAD_MARKER) { uu_panic("uu_avl_node_fini(%p, %p, %p (\"%s\")): " "node already finied\n", base, (void *)np, (void *)pp, pp->uap_name); } if (na[0] != POOL_TO_MARKER(pp) || na[1] != 0) { uu_panic("uu_avl_node_fini(%p, %p, %p (\"%s\")): " "node corrupt, in tree, or in different pool\n", base, (void *)np, (void *)pp, pp->uap_name); } } na[0] = DEAD_MARKER; na[1] = DEAD_MARKER; na[2] = DEAD_MARKER; }
void uu_list_node_fini(void *base, uu_list_node_t *np_arg, uu_list_pool_t *pp) { uu_list_node_impl_t *np = (uu_list_node_impl_t *)np_arg; if (pp->ulp_debug) { if (np->uln_next == NULL && np->uln_prev == NULL) { uu_panic("uu_list_node_fini(%p, %p, %p (\"%s\")): " "node already finied\n", base, (void *)np_arg, (void *)pp, pp->ulp_name); } if (np->uln_next != POOL_TO_MARKER(pp) || np->uln_prev != NULL) { uu_panic("uu_list_node_fini(%p, %p, %p (\"%s\")): " "node corrupt or on list\n", base, (void *)np_arg, (void *)pp, pp->ulp_name); } } np->uln_next = NULL; np->uln_prev = NULL; }
void uu_list_node_init(void *base, uu_list_node_t *np_arg, uu_list_pool_t *pp) { uu_list_node_impl_t *np = (uu_list_node_impl_t *)np_arg; if (pp->ulp_debug) { uintptr_t offset = (uintptr_t)np - (uintptr_t)base; if (offset + sizeof (*np) > pp->ulp_objsize) { uu_panic("uu_list_node_init(%p, %p, %p (\"%s\")): " "offset %ld doesn't fit in object (size %ld)\n", base, (void *)np, (void *)pp, pp->ulp_name, (long)offset, (long)pp->ulp_objsize); } if (offset != pp->ulp_nodeoffset) { uu_panic("uu_list_node_init(%p, %p, %p (\"%s\")): " "offset %ld doesn't match pool's offset (%ld)\n", base, (void *)np, (void *)pp, pp->ulp_name, (long)offset, (long)pp->ulp_objsize); } } np->uln_next = POOL_TO_MARKER(pp); np->uln_prev = NULL; }
void uu_avl_node_init(void *base, uu_avl_node_t *np, uu_avl_pool_t *pp) { uintptr_t *na = (uintptr_t *)np; if (pp->uap_debug) { uintptr_t offset = (uintptr_t)np - (uintptr_t)base; if (offset + sizeof (*np) > pp->uap_objsize) { uu_panic("uu_avl_node_init(%p, %p, %p (\"%s\")): " "offset %ld doesn't fit in object (size %ld)\n", base, (void *)np, (void *)pp, pp->uap_name, (long)offset, (long)pp->uap_objsize); } if (offset != pp->uap_nodeoffset) { uu_panic("uu_avl_node_init(%p, %p, %p (\"%s\")): " "offset %ld doesn't match pool's offset (%ld)\n", base, (void *)np, (void *)pp, pp->uap_name, (long)offset, (long)pp->uap_objsize); } } na[0] = POOL_TO_MARKER(pp); na[1] = 0; }