Lines Matching refs:p_pool

58 void cl_qcpool_construct(IN cl_qcpool_t * const p_pool)
60 CL_ASSERT(p_pool);
62 memset(p_pool, 0, sizeof(cl_qcpool_t));
64 p_pool->state = CL_UNINITIALIZED;
67 cl_status_t cl_qcpool_init(IN cl_qcpool_t * const p_pool,
79 CL_ASSERT(p_pool);
91 cl_qcpool_construct(p_pool);
103 p_pool->component_sizes = (size_t *) malloc((sizeof(size_t) +
107 if (!p_pool->component_sizes)
110 memset(p_pool->component_sizes, 0,
114 p_pool->p_components =
115 (void **)(p_pool->component_sizes + num_components);
118 memcpy(p_pool->component_sizes, component_sizes,
122 p_pool->num_components = num_components;
130 p_pool->component_sizes[i] =
131 ROUNDUP(p_pool->component_sizes[i], sizeof(uintptr_t));
134 p_pool->max_objects = max_size ? max_size : ~(size_t) 0;
135 p_pool->grow_size = grow_size;
138 p_pool->pfn_init = pfn_initializer; /* may be NULL */
139 p_pool->pfn_dtor = pfn_destructor; /* may be NULL */
140 p_pool->context = context;
142 cl_qlist_init(&p_pool->alloc_list);
144 cl_qlist_init(&p_pool->free_list);
150 p_pool->state = CL_INITIALIZED;
156 status = cl_qcpool_grow(p_pool, min_size);
159 cl_qcpool_destroy(p_pool);
164 void cl_qcpool_destroy(IN cl_qcpool_t * const p_pool)
167 CL_ASSERT(p_pool);
169 CL_ASSERT(cl_is_state_valid(p_pool->state));
171 if (p_pool->state == CL_INITIALIZED) {
180 CL_ASSERT(cl_qcpool_count(p_pool) == p_pool->num_objects);
183 if (p_pool->pfn_dtor) {
184 while (!cl_is_qlist_empty(&p_pool->free_list)) {
185 p_pool->pfn_dtor((cl_pool_item_t *)
186 cl_qlist_remove_head(&p_pool->
188 (void *)p_pool->context);
191 cl_qlist_remove_all(&p_pool->free_list);
195 while (!cl_is_qlist_empty(&p_pool->alloc_list))
196 free(cl_qlist_remove_head(&p_pool->alloc_list));
198 if (p_pool->component_sizes) {
199 free(p_pool->component_sizes);
200 p_pool->component_sizes = NULL;
204 p_pool->state = CL_UNINITIALIZED;
207 cl_status_t cl_qcpool_grow(IN cl_qcpool_t * const p_pool, IN size_t obj_count)
215 CL_ASSERT(p_pool);
216 CL_ASSERT(p_pool->state == CL_INITIALIZED);
220 if (p_pool->num_objects == p_pool->max_objects)
224 if (obj_count > (p_pool->max_objects - p_pool->num_objects))
225 obj_count = p_pool->max_objects - p_pool->num_objects;
229 for (i = 0; i < p_pool->num_components; i++)
230 obj_size += p_pool->component_sizes[i];
244 cl_qlist_insert_tail(&p_pool->alloc_list, (cl_list_item_t *) p_objects);
250 p_pool->p_components[0] = p_objects;
251 for (i = 1; i < p_pool->num_components; i++) {
253 p_pool->p_components[i] =
254 (uint8_t *) p_pool->p_components[i - 1] +
255 p_pool->component_sizes[i - 1];
262 if (p_pool->pfn_init) {
264 status = p_pool->pfn_init(p_pool->p_components,
265 p_pool->num_components,
266 (void *)p_pool->context,
275 if (p_pool->pfn_dtor)
276 p_pool->pfn_dtor(p_pool_item,
277 (void *)p_pool->
290 (cl_pool_item_t *) p_pool->p_components[0];
298 p_pool_item->p_pool = p_pool;
302 cl_qlist_insert_head(&p_pool->free_list,
305 p_pool->num_objects++;
314 cl_pool_item_t *cl_qcpool_get(IN cl_qcpool_t * const p_pool)
318 CL_ASSERT(p_pool);
319 CL_ASSERT(p_pool->state == CL_INITIALIZED);
321 if (cl_is_qlist_empty(&p_pool->free_list)) {
326 if (!p_pool->grow_size)
330 cl_qcpool_grow(p_pool, p_pool->grow_size);
335 if (cl_is_qlist_empty(&p_pool->free_list))
339 p_list_item = cl_qlist_remove_head(&p_pool->free_list);
341 CL_ASSERT(p_list_item != cl_qlist_end(&p_pool->free_list));
345 cl_pool_item_t *cl_qcpool_get_tail(IN cl_qcpool_t * const p_pool)
349 CL_ASSERT(p_pool);
350 CL_ASSERT(p_pool->state == CL_INITIALIZED);
352 if (cl_is_qlist_empty(&p_pool->free_list)) {
357 if (!p_pool->grow_size)
361 cl_qcpool_grow(p_pool, p_pool->grow_size);
366 if (cl_is_qlist_empty(&p_pool->free_list))
370 p_list_item = cl_qlist_remove_tail(&p_pool->free_list);
372 CL_ASSERT(p_list_item != cl_qlist_end(&p_pool->free_list));
389 cl_qpool_t *p_pool = (cl_qpool_t *) context;
391 CL_ASSERT(p_pool);
392 CL_ASSERT(p_pool->pfn_init);
397 return (p_pool->pfn_init(p_comp_array[0], (void *)p_pool->context,
408 cl_qpool_t *p_pool = (cl_qpool_t *) context;
410 CL_ASSERT(p_pool);
411 CL_ASSERT(p_pool->pfn_dtor);
413 p_pool->pfn_dtor(p_pool_item, (void *)p_pool->context);
416 void cl_qpool_construct(IN cl_qpool_t * const p_pool)
418 memset(p_pool, 0, sizeof(cl_qpool_t));
420 cl_qcpool_construct(&p_pool->qcpool);
423 cl_status_t cl_qpool_init(IN cl_qpool_t * const p_pool,
433 CL_ASSERT(p_pool);
435 p_pool->pfn_init = pfn_initializer; /* may be NULL */
436 p_pool->pfn_dtor = pfn_destructor; /* may be NULL */
437 p_pool->context = context;
439 status = cl_qcpool_init(&p_pool->qcpool, min_size, max_size, grow_size,
443 p_pool);
461 cl_cpool_t *p_pool = (cl_cpool_t *) context;
465 CL_ASSERT(p_pool);
485 if (p_pool->pfn_init) {
486 status = p_pool->pfn_init(p_comp_array, num_components,
487 (void *)p_pool->context);
500 cl_cpool_t *p_pool = (cl_cpool_t *) context;
502 CL_ASSERT(p_pool);
503 CL_ASSERT(p_pool->pfn_dtor);
507 p_pool->pfn_dtor((void *)((cl_pool_obj_t *) p_pool_item)->p_object,
508 (void *)p_pool->context);
511 void cl_cpool_construct(IN cl_cpool_t * const p_pool)
513 CL_ASSERT(p_pool);
515 memset(p_pool, 0, sizeof(cl_cpool_t));
517 cl_qcpool_construct(&p_pool->qcpool);
520 cl_status_t cl_cpool_init(IN cl_cpool_t * const p_pool,
531 CL_ASSERT(p_pool);
539 p_pool->pfn_init = pfn_initializer; /* may be NULL */
540 p_pool->pfn_dtor = pfn_destructor; /* may be NULL */
541 p_pool->context = context;
543 status = cl_qcpool_init(&p_pool->qcpool, min_size, max_size, grow_size,
547 p_pool);
567 cl_pool_t *p_pool = (cl_pool_t *) context;
571 CL_ASSERT(p_pool);
594 if (p_pool->pfn_init)
595 status = p_pool->pfn_init(*pp_obj, (void *)p_pool->context);
606 cl_pool_t *p_pool = (cl_pool_t *) context;
608 CL_ASSERT(p_pool);
609 CL_ASSERT(p_pool->pfn_dtor);
613 p_pool->pfn_dtor((void *)((cl_pool_obj_t *) p_pool_item)->p_object,
614 (void *)p_pool->context);
617 void cl_pool_construct(IN cl_pool_t * const p_pool)
619 CL_ASSERT(p_pool);
621 memset(p_pool, 0, sizeof(cl_pool_t));
623 cl_qcpool_construct(&p_pool->qcpool);
626 cl_status_t cl_pool_init(IN cl_pool_t * const p_pool, IN const size_t min_size,
636 CL_ASSERT(p_pool);
642 p_pool->pfn_init = pfn_initializer; /* may be NULL */
643 p_pool->pfn_dtor = pfn_destructor; /* may be NULL */
644 p_pool->context = context;
650 status = cl_qcpool_init(&p_pool->qcpool, min_size, max_size, grow_size,
653 p_pool);