Lines Matching refs:ap
212 uu_avl_t *ap, *next, *prev; in uu_avl_create() local
219 ap = uu_zalloc(sizeof (*ap)); in uu_avl_create()
220 if (ap == NULL) { in uu_avl_create()
225 ap->ua_pool = pp; in uu_avl_create()
226 ap->ua_parent_enc = UU_PTR_ENCODE(parent); in uu_avl_create()
227 ap->ua_debug = pp->uap_debug || (flags & UU_AVL_DEBUG); in uu_avl_create()
228 ap->ua_index = (pp->uap_last_index = INDEX_NEXT(pp->uap_last_index)); in uu_avl_create()
230 avl_create(&ap->ua_tree, &uu_avl_node_compare, pp->uap_objsize, in uu_avl_create()
233 ap->ua_null_walk.uaw_next = &ap->ua_null_walk; in uu_avl_create()
234 ap->ua_null_walk.uaw_prev = &ap->ua_null_walk; in uu_avl_create()
239 ap->ua_next_enc = UU_PTR_ENCODE(next); in uu_avl_create()
240 ap->ua_prev_enc = UU_PTR_ENCODE(prev); in uu_avl_create()
241 next->ua_prev_enc = UU_PTR_ENCODE(ap); in uu_avl_create()
242 prev->ua_next_enc = UU_PTR_ENCODE(ap); in uu_avl_create()
245 return (ap); in uu_avl_create()
249 uu_avl_destroy(uu_avl_t *ap) in uu_avl_destroy() argument
251 uu_avl_pool_t *pp = ap->ua_pool; in uu_avl_destroy()
253 if (ap->ua_debug) { in uu_avl_destroy()
254 if (avl_numnodes(&ap->ua_tree) != 0) { in uu_avl_destroy()
256 (void *)ap); in uu_avl_destroy()
258 if (ap->ua_null_walk.uaw_next != &ap->ua_null_walk || in uu_avl_destroy()
259 ap->ua_null_walk.uaw_prev != &ap->ua_null_walk) { in uu_avl_destroy()
261 (void *)ap); in uu_avl_destroy()
265 UU_AVL_PTR(ap->ua_next_enc)->ua_prev_enc = ap->ua_prev_enc; in uu_avl_destroy()
266 UU_AVL_PTR(ap->ua_prev_enc)->ua_next_enc = ap->ua_next_enc; in uu_avl_destroy()
268 ap->ua_prev_enc = UU_PTR_ENCODE(NULL); in uu_avl_destroy()
269 ap->ua_next_enc = UU_PTR_ENCODE(NULL); in uu_avl_destroy()
271 ap->ua_pool = NULL; in uu_avl_destroy()
272 avl_destroy(&ap->ua_tree); in uu_avl_destroy()
274 uu_free(ap); in uu_avl_destroy()
278 uu_avl_numnodes(uu_avl_t *ap) in uu_avl_numnodes() argument
280 return (avl_numnodes(&ap->ua_tree)); in uu_avl_numnodes()
284 uu_avl_first(uu_avl_t *ap) in uu_avl_first() argument
286 return (avl_first(&ap->ua_tree)); in uu_avl_first()
290 uu_avl_last(uu_avl_t *ap) in uu_avl_last() argument
292 return (avl_last(&ap->ua_tree)); in uu_avl_last()
296 uu_avl_next(uu_avl_t *ap, void *node) in uu_avl_next() argument
298 return (AVL_NEXT(&ap->ua_tree, node)); in uu_avl_next()
302 uu_avl_prev(uu_avl_t *ap, void *node) in uu_avl_prev() argument
304 return (AVL_PREV(&ap->ua_tree, node)); in uu_avl_prev()
308 _avl_walk_init(uu_avl_walk_t *wp, uu_avl_t *ap, uint32_t flags) in _avl_walk_init() argument
316 wp->uaw_avl = ap; in _avl_walk_init()
321 wp->uaw_next_result = avl_first(&ap->ua_tree); in _avl_walk_init()
323 wp->uaw_next_result = avl_last(&ap->ua_tree); in _avl_walk_init()
325 if (ap->ua_debug || robust) { in _avl_walk_init()
326 wp->uaw_next = next = &ap->ua_null_walk; in _avl_walk_init()
334 _avl_walk_advance(uu_avl_walk_t *wp, uu_avl_t *ap) in _avl_walk_advance() argument
338 avl_tree_t *t = &ap->ua_tree; in _avl_walk_advance()
363 uu_avl_walk_start(uu_avl_t *ap, uint32_t flags) in uu_avl_walk_start() argument
378 _avl_walk_init(wp, ap, flags); in uu_avl_walk_start()
396 uu_avl_walk(uu_avl_t *ap, uu_walk_fn_t *func, void *private, uint32_t flags) in uu_avl_walk() argument
408 _avl_walk_init(&my_walk, ap, flags); in uu_avl_walk()
410 (e = _avl_walk_advance(&my_walk, ap)) != NULL) in uu_avl_walk()
421 uu_avl_remove(uu_avl_t *ap, void *elem) in uu_avl_remove() argument
424 uu_avl_pool_t *pp = ap->ua_pool; in uu_avl_remove()
427 if (ap->ua_debug) { in uu_avl_remove()
431 ap->ua_index = INDEX_NEXT(ap->ua_index); in uu_avl_remove()
439 for (wp = ap->ua_null_walk.uaw_next; wp != &ap->ua_null_walk; in uu_avl_remove()
443 (void) _avl_walk_advance(wp, ap); in uu_avl_remove()
446 "walker\n", (void *)ap, elem); in uu_avl_remove()
450 avl_remove(&ap->ua_tree, elem); in uu_avl_remove()
457 uu_avl_teardown(uu_avl_t *ap, void **cookie) in uu_avl_teardown() argument
459 void *elem = avl_destroy_nodes(&ap->ua_tree, cookie); in uu_avl_teardown()
462 uu_avl_pool_t *pp = ap->ua_pool; in uu_avl_teardown()
472 uu_avl_find(uu_avl_t *ap, void *elem, void *private, uu_avl_index_t *out) in uu_avl_find() argument
477 info.ac_compare = ap->ua_pool->uap_cmp; in uu_avl_find()
482 result = avl_find(&ap->ua_tree, &info, out); in uu_avl_find()
484 *out = INDEX_ENCODE(ap, *out); in uu_avl_find()
486 if (ap->ua_debug && result != NULL) in uu_avl_find()
493 uu_avl_insert(uu_avl_t *ap, void *elem, uu_avl_index_t idx) in uu_avl_insert() argument
495 if (ap->ua_debug) { in uu_avl_insert()
496 uu_avl_pool_t *pp = ap->ua_pool; in uu_avl_insert()
502 (void *)ap, elem, (void *)idx); in uu_avl_insert()
506 (void *)ap, elem, (void *)idx); in uu_avl_insert()
510 (void *)ap, elem, (void *)idx); in uu_avl_insert()
512 if (!INDEX_VALID(ap, idx)) in uu_avl_insert()
514 (void *)ap, elem, (void *)idx, in uu_avl_insert()
521 ap->ua_index = INDEX_NEXT(ap->ua_index); in uu_avl_insert()
523 avl_insert(&ap->ua_tree, elem, INDEX_DECODE(idx)); in uu_avl_insert()
527 uu_avl_nearest_next(uu_avl_t *ap, uu_avl_index_t idx) in uu_avl_nearest_next() argument
529 if (ap->ua_debug && !INDEX_VALID(ap, idx)) in uu_avl_nearest_next()
531 (void *)ap, (void *)idx, INDEX_CHECK(idx)? in uu_avl_nearest_next()
533 return (avl_nearest(&ap->ua_tree, INDEX_DECODE(idx), AVL_AFTER)); in uu_avl_nearest_next()
537 uu_avl_nearest_prev(uu_avl_t *ap, uu_avl_index_t idx) in uu_avl_nearest_prev() argument
539 if (ap->ua_debug && !INDEX_VALID(ap, idx)) in uu_avl_nearest_prev()
541 (void *)ap, (void *)idx, INDEX_CHECK(idx)? in uu_avl_nearest_prev()
543 return (avl_nearest(&ap->ua_tree, INDEX_DECODE(idx), AVL_BEFORE)); in uu_avl_nearest_prev()