LCOV - code coverage report
Current view: top level - tommyds - tommyarrayblkof.c (source / functions) Hit Total Coverage
Test: lcov.info Lines: 24 24 100.0 %
Date: 2026-04-29 15:04:44 Functions: 4 4 100.0 %

          Line data    Source code
       1             : // SPDX-License-Identifier: BSD-2-Clause
       2             : // Copyright (C) 2013 Andrea Mazzoleni
       3             : 
       4             : #include "tommyarrayblkof.h"
       5             : 
       6             : /******************************************************************************/
       7             : /* array */
       8             : 
       9         318 : TOMMY_API void tommy_arrayblkof_init(tommy_arrayblkof* array, tommy_size_t element_size)
      10             : {
      11         318 :         tommy_array_init(&array->block);
      12             : 
      13         318 :         array->element_size = element_size;
      14         318 :         array->count = 0;
      15         318 : }
      16             : 
      17         293 : TOMMY_API void tommy_arrayblkof_done(tommy_arrayblkof* array)
      18             : {
      19             :         tommy_size_t i;
      20             : 
      21         866 :         for (i = 0; i < tommy_array_size(&array->block); ++i)
      22         573 :                 tommy_free(tommy_array_get(&array->block, i));
      23             : 
      24         293 :         tommy_array_done(&array->block);
      25         293 : }
      26             : 
      27     1851430 : TOMMY_API void tommy_arrayblkof_grow(tommy_arrayblkof* array, tommy_size_t count)
      28             : {
      29             :         tommy_size_t block_max;
      30             :         tommy_size_t block_mac;
      31             : 
      32     1851430 :         if (array->count >= count)
      33      140594 :                 return;
      34     1710836 :         array->count = count;
      35             : 
      36     1710836 :         block_max = (count + TOMMY_ARRAYBLKOF_SIZE - 1) / TOMMY_ARRAYBLKOF_SIZE;
      37     1710836 :         block_mac = tommy_array_size(&array->block);
      38             : 
      39     1710836 :         if (block_mac < block_max) {
      40             :                 /* grow the block array */
      41         615 :                 tommy_array_grow(&array->block, block_max);
      42             : 
      43             :                 /* allocate new blocks */
      44        1230 :                 while (block_mac < block_max) {
      45         615 :                         void** ptr = tommy_cast(void**, tommy_calloc(TOMMY_ARRAYBLKOF_SIZE, array->element_size));
      46             : 
      47             :                         /* set the new block */
      48         615 :                         tommy_array_set(&array->block, block_mac, ptr);
      49             : 
      50         615 :                         ++block_mac;
      51             :                 }
      52             :         }
      53             : }
      54             : 
      55           1 : TOMMY_API tommy_size_t tommy_arrayblkof_memory_usage(tommy_arrayblkof* array)
      56             : {
      57           1 :         return tommy_array_memory_usage(&array->block) + tommy_array_size(&array->block) * TOMMY_ARRAYBLKOF_SIZE * array->element_size;
      58             : }
      59             : 

Generated by: LCOV version 1.0