Lines Matching refs:ap

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