Lines Matching refs:ap

211 	uu_avl_t *ap, *next, *prev;  in uu_avl_create()  local
218 ap = uu_zalloc(sizeof (*ap)); in uu_avl_create()
219 if (ap == NULL) { in uu_avl_create()
224 ap->ua_pool = pp; in uu_avl_create()
225 ap->ua_parent_enc = UU_PTR_ENCODE(parent); in uu_avl_create()
226 ap->ua_debug = pp->uap_debug || (flags & UU_AVL_DEBUG); in uu_avl_create()
227 ap->ua_index = (pp->uap_last_index = INDEX_NEXT(pp->uap_last_index)); in uu_avl_create()
229 avl_create(&ap->ua_tree, &uu_avl_node_compare, pp->uap_objsize, in uu_avl_create()
232 ap->ua_null_walk.uaw_next = &ap->ua_null_walk; in uu_avl_create()
233 ap->ua_null_walk.uaw_prev = &ap->ua_null_walk; in uu_avl_create()
238 ap->ua_next_enc = UU_PTR_ENCODE(next); in uu_avl_create()
239 ap->ua_prev_enc = UU_PTR_ENCODE(prev); in uu_avl_create()
240 next->ua_prev_enc = UU_PTR_ENCODE(ap); in uu_avl_create()
241 prev->ua_next_enc = UU_PTR_ENCODE(ap); in uu_avl_create()
244 return (ap); in uu_avl_create()
248 uu_avl_destroy(uu_avl_t *ap) in uu_avl_destroy() argument
250 uu_avl_pool_t *pp = ap->ua_pool; in uu_avl_destroy()
252 if (ap->ua_debug) { in uu_avl_destroy()
253 if (avl_numnodes(&ap->ua_tree) != 0) { in uu_avl_destroy()
255 (void *)ap); in uu_avl_destroy()
257 if (ap->ua_null_walk.uaw_next != &ap->ua_null_walk || in uu_avl_destroy()
258 ap->ua_null_walk.uaw_prev != &ap->ua_null_walk) { in uu_avl_destroy()
260 (void *)ap); in uu_avl_destroy()
264 UU_AVL_PTR(ap->ua_next_enc)->ua_prev_enc = ap->ua_prev_enc; in uu_avl_destroy()
265 UU_AVL_PTR(ap->ua_prev_enc)->ua_next_enc = ap->ua_next_enc; in uu_avl_destroy()
267 ap->ua_prev_enc = UU_PTR_ENCODE(NULL); in uu_avl_destroy()
268 ap->ua_next_enc = UU_PTR_ENCODE(NULL); in uu_avl_destroy()
270 ap->ua_pool = NULL; in uu_avl_destroy()
271 avl_destroy(&ap->ua_tree); in uu_avl_destroy()
273 uu_free(ap); in uu_avl_destroy()
277 uu_avl_numnodes(uu_avl_t *ap) in uu_avl_numnodes() argument
279 return (avl_numnodes(&ap->ua_tree)); in uu_avl_numnodes()
283 uu_avl_first(uu_avl_t *ap) in uu_avl_first() argument
285 return (avl_first(&ap->ua_tree)); in uu_avl_first()
289 uu_avl_last(uu_avl_t *ap) in uu_avl_last() argument
291 return (avl_last(&ap->ua_tree)); in uu_avl_last()
295 uu_avl_next(uu_avl_t *ap, void *node) in uu_avl_next() argument
297 return (AVL_NEXT(&ap->ua_tree, node)); in uu_avl_next()
301 uu_avl_prev(uu_avl_t *ap, void *node) in uu_avl_prev() argument
303 return (AVL_PREV(&ap->ua_tree, node)); in uu_avl_prev()
307 _avl_walk_init(uu_avl_walk_t *wp, uu_avl_t *ap, uint32_t flags) in _avl_walk_init() argument
315 wp->uaw_avl = ap; in _avl_walk_init()
320 wp->uaw_next_result = avl_first(&ap->ua_tree); in _avl_walk_init()
322 wp->uaw_next_result = avl_last(&ap->ua_tree); in _avl_walk_init()
324 if (ap->ua_debug || robust) { in _avl_walk_init()
325 wp->uaw_next = next = &ap->ua_null_walk; in _avl_walk_init()
333 _avl_walk_advance(uu_avl_walk_t *wp, uu_avl_t *ap) in _avl_walk_advance() argument
337 avl_tree_t *t = &ap->ua_tree; in _avl_walk_advance()
362 uu_avl_walk_start(uu_avl_t *ap, uint32_t flags) in uu_avl_walk_start() argument
377 _avl_walk_init(wp, ap, flags); in uu_avl_walk_start()
395 uu_avl_walk(uu_avl_t *ap, uu_walk_fn_t *func, void *private, uint32_t flags) in uu_avl_walk() argument
407 _avl_walk_init(&my_walk, ap, flags); in uu_avl_walk()
409 (e = _avl_walk_advance(&my_walk, ap)) != NULL) in uu_avl_walk()
420 uu_avl_remove(uu_avl_t *ap, void *elem) in uu_avl_remove() argument
423 uu_avl_pool_t *pp = ap->ua_pool; in uu_avl_remove()
426 if (ap->ua_debug) { in uu_avl_remove()
430 ap->ua_index = INDEX_NEXT(ap->ua_index); in uu_avl_remove()
438 for (wp = ap->ua_null_walk.uaw_next; wp != &ap->ua_null_walk; in uu_avl_remove()
442 (void) _avl_walk_advance(wp, ap); in uu_avl_remove()
445 "walker\n", (void *)ap, elem); in uu_avl_remove()
449 avl_remove(&ap->ua_tree, elem); in uu_avl_remove()
456 uu_avl_teardown(uu_avl_t *ap, void **cookie) in uu_avl_teardown() argument
458 void *elem = avl_destroy_nodes(&ap->ua_tree, cookie); in uu_avl_teardown()
461 uu_avl_pool_t *pp = ap->ua_pool; in uu_avl_teardown()
471 uu_avl_find(uu_avl_t *ap, void *elem, void *private, uu_avl_index_t *out) in uu_avl_find() argument
476 info.ac_compare = ap->ua_pool->uap_cmp; in uu_avl_find()
481 result = avl_find(&ap->ua_tree, &info, out); in uu_avl_find()
483 *out = INDEX_ENCODE(ap, *out); in uu_avl_find()
485 if (ap->ua_debug && result != NULL) in uu_avl_find()
492 uu_avl_insert(uu_avl_t *ap, void *elem, uu_avl_index_t idx) in uu_avl_insert() argument
494 if (ap->ua_debug) { in uu_avl_insert()
495 uu_avl_pool_t *pp = ap->ua_pool; in uu_avl_insert()
501 (void *)ap, elem, (void *)idx); in uu_avl_insert()
505 (void *)ap, elem, (void *)idx); in uu_avl_insert()
509 (void *)ap, elem, (void *)idx); in uu_avl_insert()
511 if (!INDEX_VALID(ap, idx)) in uu_avl_insert()
513 (void *)ap, elem, (void *)idx, in uu_avl_insert()
520 ap->ua_index = INDEX_NEXT(ap->ua_index); in uu_avl_insert()
522 avl_insert(&ap->ua_tree, elem, INDEX_DECODE(idx)); in uu_avl_insert()
526 uu_avl_nearest_next(uu_avl_t *ap, uu_avl_index_t idx) in uu_avl_nearest_next() argument
528 if (ap->ua_debug && !INDEX_VALID(ap, idx)) in uu_avl_nearest_next()
530 (void *)ap, (void *)idx, INDEX_CHECK(idx)? in uu_avl_nearest_next()
532 return (avl_nearest(&ap->ua_tree, INDEX_DECODE(idx), AVL_AFTER)); in uu_avl_nearest_next()
536 uu_avl_nearest_prev(uu_avl_t *ap, uu_avl_index_t idx) in uu_avl_nearest_prev() argument
538 if (ap->ua_debug && !INDEX_VALID(ap, idx)) in uu_avl_nearest_prev()
540 (void *)ap, (void *)idx, INDEX_CHECK(idx)? in uu_avl_nearest_prev()
542 return (avl_nearest(&ap->ua_tree, INDEX_DECODE(idx), AVL_BEFORE)); in uu_avl_nearest_prev()