Lines Matching refs:arr
39 util_sparse_array_init(struct util_sparse_array *arr,
42 memset(arr, 0, sizeof(*arr));
43 arr->elem_size = elem_size;
44 arr->node_size_log2 = util_logbase2_64(node_size);
45 assert(node_size >= 2 && node_size == (1ull << arr->node_size_log2));
74 _util_sparse_array_node_finish(struct util_sparse_array *arr,
79 size_t node_size = 1ull << arr->node_size_log2;
82 _util_sparse_array_node_finish(arr, children[i]);
90 util_sparse_array_finish(struct util_sparse_array *arr)
92 if (arr->root)
93 _util_sparse_array_node_finish(arr, arr->root);
97 _util_sparse_array_node_alloc(struct util_sparse_array *arr,
102 size = arr->elem_size << arr->node_size_log2;
104 size = sizeof(uintptr_t) << arr->node_size_log2;
132 util_sparse_array_get(struct util_sparse_array *arr, uint64_t idx)
134 const unsigned node_size_log2 = arr->node_size_log2;
135 uintptr_t root = p_atomic_read(&arr->root);
143 uintptr_t new_root = _util_sparse_array_node_alloc(arr, root_level);
144 root = _util_sparse_array_set_or_free_node(&arr->root,
157 uintptr_t new_root = _util_sparse_array_node_alloc(arr, root_level + 1);
168 root = _util_sparse_array_set_or_free_node(&arr->root, root, new_root);
181 child = _util_sparse_array_node_alloc(arr, node_level - 1);
191 return (void *)((char *)node_data + (elem_idx * arr->elem_size));
195 validate_node_level(struct util_sparse_array *arr,
202 size_t node_size = 1ull << arr->node_size_log2;
205 validate_node_level(arr, children[i], level - 1);
211 util_sparse_array_validate(struct util_sparse_array *arr)
213 uintptr_t root = p_atomic_read(&arr->root);
214 validate_node_level(arr, root, _util_sparse_array_node_level(root));
219 struct util_sparse_array *arr,
224 fl->arr = arr;
241 void *last_elem = util_sparse_array_get(fl->arr, items[0]);
246 last_elem = util_sparse_array_get(fl->arr, items[i]);
271 void *head_elem = util_sparse_array_get(fl->arr, head_idx);
292 void *head_elem = util_sparse_array_get(fl->arr, head_idx);