Status da_reserve(DynArray* da, size_t size) { if(da->pos+size > da->cur_size_pa) RETURN_STATUS_IF_ERR(da_set_size(da, da->cur_size_pa+size)); da->cur_size = std::max(da->cur_size, da->pos+size); return INFO::OK; }
void pool_free_all(Pool* p) { p->freelist = mem_freelist_Sentinel(); // must be reset before da_set_size or CHECK_DA will complain. p->da.pos = 0; da_set_size(&p->da, 0); }
// note: can't call dst_empty_output_buffer from dst_init or vice versa // because only the former must advance da->pos. static void make_room_in_buffer(j_compress_ptr cinfo) { DstPtr dst = (DstPtr)cinfo->dest; DynArray* da = dst->da; void* start = da->base + da->cur_size; if(da_set_size(da, da->cur_size+OUTPUT_BUF_SIZE) != 0) ERREXIT(cinfo, JERR_FILE_WRITE); dst->pub.next_output_byte = (JOCTET*)start; dst->pub.free_in_buffer = OUTPUT_BUF_SIZE; }