19 #include "heap_priv.h"
156 static unsigned char *hp_allocate_one_chunk(
HP_DATASPACE *info);
169 if (info->block.levels)
171 hp_free_level(&info->block,info->block.levels,info->block.root,
174 info->block.levels=0;
175 info->del_chunk_count= info->chunk_count= 0;
177 info->total_data_length= 0;
192 unsigned char *hp_allocate_chunkset(
HP_DATASPACE *info, uint32_t )
194 unsigned char* result;
196 result= hp_allocate_one_chunk(info);
199 result[info->offset_status]= CHUNK_STATUS_ACTIVE;
216 static unsigned char *hp_allocate_one_chunk(
HP_DATASPACE *info)
218 unsigned char* curr_chunk;
219 size_t length, block_pos;
223 curr_chunk=info->del_link;
224 info->del_link= *((
unsigned char**) curr_chunk);
225 info->del_chunk_count--;
230 block_pos= (info->chunk_count % info->block.records_in_block);
233 if (hp_get_new_block(&info->block,&length))
239 info->total_data_length+= length;
243 curr_chunk= ((
unsigned char*) info->block.level_info[0].last_blocks +
244 block_pos * info->block.recbuffer);
261 void hp_free_chunks(
HP_DATASPACE *info,
unsigned char *pos)
263 unsigned char* curr_chunk= pos;
267 info->del_chunk_count++;
268 *((
unsigned char**) curr_chunk)= info->del_link;
269 info->del_link= curr_chunk;
271 curr_chunk[info->offset_status]= CHUNK_STATUS_DELETED;