Lines Matching refs:pa

97 	prop_array_t pa = *obj;
100 _PROP_ASSERT(pa->pa_count <= pa->pa_capacity);
101 _PROP_ASSERT((pa->pa_capacity == 0 && pa->pa_array == NULL) ||
102 (pa->pa_capacity != 0 && pa->pa_array != NULL));
105 if (pa->pa_count == 0) {
106 if (pa->pa_array != NULL)
107 _PROP_FREE(pa->pa_array, M_PROP_ARRAY);
109 _PROP_RWLOCK_DESTROY(pa->pa_rwlock);
111 _PROP_POOL_PUT(_prop_array_pool, pa);
116 po = pa->pa_array[pa->pa_count - 1];
129 if (!_prop_stack_push(stack, pa, NULL, NULL, NULL)) {
134 --pa->pa_count;
142 prop_array_t pa = obj;
144 _PROP_ASSERT(pa->pa_count != 0);
145 --pa->pa_count;
152 prop_array_t pa = v;
158 _PROP_RWLOCK_RDLOCK(pa->pa_rwlock);
160 if (pa->pa_count == 0) {
161 _PROP_RWLOCK_UNLOCK(pa->pa_rwlock);
170 pi = _prop_array_iterator_locked(pa);
197 _PROP_RWLOCK_UNLOCK(pa->pa_rwlock);
261 prop_array_t pa;
272 pa = _PROP_POOL_GET(_prop_array_pool);
273 if (pa != NULL) {
274 _prop_object_init(&pa->pa_obj, &_prop_object_type_array);
275 pa->pa_obj.po_type = &_prop_object_type_array;
277 _PROP_RWLOCK_INIT(pa->pa_rwlock);
278 pa->pa_array = array;
279 pa->pa_capacity = capacity;
280 pa->pa_count = 0;
281 pa->pa_flags = 0;
283 pa->pa_version = 0;
287 return (pa);
291 _prop_array_expand(prop_array_t pa, unsigned int capacity)
299 oarray = pa->pa_array;
305 memcpy(array, oarray, pa->pa_capacity * sizeof(*array));
306 pa->pa_array = array;
307 pa->pa_capacity = capacity;
319 prop_array_t pa = pai->pai_base.pi_obj;
322 _PROP_ASSERT(prop_object_is_array(pa));
324 if (pa->pa_version != pai->pai_base.pi_version)
327 _PROP_ASSERT(pai->pai_index <= pa->pa_count);
329 if (pai->pai_index == pa->pa_count)
332 po = pa->pa_array[pai->pai_index];
343 prop_array_t pa __unused = pai->pai_base.pi_obj;
346 _PROP_ASSERT(prop_object_is_array(pa));
348 _PROP_RWLOCK_RDLOCK(pa->pa_rwlock);
350 _PROP_RWLOCK_UNLOCK(pa->pa_rwlock);
358 prop_array_t pa = pai->pai_base.pi_obj;
360 _PROP_ASSERT(prop_object_is_array(pa));
363 pai->pai_base.pi_version = pa->pa_version;
370 prop_array_t pa __unused = pai->pai_base.pi_obj;
372 _PROP_ASSERT(prop_object_is_array(pa));
374 _PROP_RWLOCK_RDLOCK(pa->pa_rwlock);
376 _PROP_RWLOCK_UNLOCK(pa->pa_rwlock);
411 prop_array_t pa;
420 pa = _prop_array_alloc(opa->pa_count);
421 if (pa != NULL) {
425 pa->pa_array[idx] = po;
427 pa->pa_count = opa->pa_count;
428 pa->pa_flags = opa->pa_flags;
431 return (pa);
441 prop_array_t pa;
443 pa = prop_array_copy(opa);
444 if (pa != NULL)
445 pa->pa_flags &= ~PA_F_IMMUTABLE;
447 return (pa);
455 prop_array_capacity(prop_array_t pa)
459 if (! prop_object_is_array(pa))
462 _PROP_RWLOCK_RDLOCK(pa->pa_rwlock);
463 rv = pa->pa_capacity;
464 _PROP_RWLOCK_UNLOCK(pa->pa_rwlock);
474 prop_array_count(prop_array_t pa)
478 if (! prop_object_is_array(pa))
481 _PROP_RWLOCK_RDLOCK(pa->pa_rwlock);
482 rv = pa->pa_count;
483 _PROP_RWLOCK_UNLOCK(pa->pa_rwlock);
495 prop_array_ensure_capacity(prop_array_t pa, unsigned int capacity)
499 if (! prop_object_is_array(pa))
502 _PROP_RWLOCK_WRLOCK(pa->pa_rwlock);
503 if (capacity > pa->pa_capacity)
504 rv = _prop_array_expand(pa, capacity);
507 _PROP_RWLOCK_UNLOCK(pa->pa_rwlock);
513 _prop_array_iterator_locked(prop_array_t pa)
517 if (! prop_object_is_array(pa))
525 prop_object_retain(pa);
526 pai->pai_base.pi_obj = pa;
538 prop_array_iterator(prop_array_t pa)
542 _PROP_RWLOCK_RDLOCK(pa->pa_rwlock);
543 pi = _prop_array_iterator_locked(pa);
544 _PROP_RWLOCK_UNLOCK(pa->pa_rwlock);
553 prop_array_make_immutable(prop_array_t pa)
556 _PROP_RWLOCK_WRLOCK(pa->pa_rwlock);
557 if (prop_array_is_immutable(pa) == false)
558 pa->pa_flags |= PA_F_IMMUTABLE;
559 _PROP_RWLOCK_UNLOCK(pa->pa_rwlock);
567 prop_array_mutable(prop_array_t pa)
571 _PROP_RWLOCK_RDLOCK(pa->pa_rwlock);
572 rv = prop_array_is_immutable(pa) == false;
573 _PROP_RWLOCK_UNLOCK(pa->pa_rwlock);
583 prop_array_get(prop_array_t pa, unsigned int idx)
587 if (! prop_object_is_array(pa))
590 _PROP_RWLOCK_RDLOCK(pa->pa_rwlock);
591 if (idx >= pa->pa_count)
593 po = pa->pa_array[idx];
596 _PROP_RWLOCK_UNLOCK(pa->pa_rwlock);
601 _prop_array_add(prop_array_t pa, prop_object_t po)
608 _PROP_ASSERT(pa->pa_count <= pa->pa_capacity);
610 if (prop_array_is_immutable(pa) ||
611 (pa->pa_count == pa->pa_capacity &&
612 _prop_array_expand(pa, pa->pa_capacity + EXPAND_STEP) == false))
616 pa->pa_array[pa->pa_count++] = po;
617 pa->pa_version++;
630 prop_array_set(prop_array_t pa, unsigned int idx, prop_object_t po)
635 if (! prop_object_is_array(pa))
638 _PROP_RWLOCK_WRLOCK(pa->pa_rwlock);
640 if (prop_array_is_immutable(pa))
643 if (idx == pa->pa_count) {
644 rv = _prop_array_add(pa, po);
648 _PROP_ASSERT(idx < pa->pa_count);
650 opo = pa->pa_array[idx];
654 pa->pa_array[idx] = po;
655 pa->pa_version++;
662 _PROP_RWLOCK_UNLOCK(pa->pa_rwlock);
672 prop_array_add(prop_array_t pa, prop_object_t po)
676 if (! prop_object_is_array(pa))
679 _PROP_RWLOCK_WRLOCK(pa->pa_rwlock);
680 rv = _prop_array_add(pa, po);
681 _PROP_RWLOCK_UNLOCK(pa->pa_rwlock);
692 prop_array_remove(prop_array_t pa, unsigned int idx)
696 if (! prop_object_is_array(pa))
699 _PROP_RWLOCK_WRLOCK(pa->pa_rwlock);
701 _PROP_ASSERT(idx < pa->pa_count);
704 if (prop_array_is_immutable(pa)) {
705 _PROP_RWLOCK_UNLOCK(pa->pa_rwlock);
709 po = pa->pa_array[idx];
712 for (++idx; idx < pa->pa_count; idx++)
713 pa->pa_array[idx - 1] = pa->pa_array[idx];
714 pa->pa_count--;
715 pa->pa_version++;
717 _PROP_RWLOCK_UNLOCK(pa->pa_rwlock);
743 prop_array_externalize(prop_array_t pa)
753 (*pa->pa_obj.po_type->pot_extern)(ctx, pa) == false ||