Lines Matching refs:pstack

30 static void init_block(ref_stack_t *pstack, const ref *pblock_array,
32 static int ref_stack_push_block(ref_stack_t *pstack, uint keep, uint add);
73 ref_stack_init(ref_stack_t *pstack, const ref *pblock_array, in ref_stack_init() argument
90 pstack->bot = body + bot_guard; in ref_stack_init()
91 pstack->p = pstack->bot - 1; in ref_stack_init()
92 pstack->top = pstack->p + avail; in ref_stack_init()
93 pstack->current = *pblock_array; in ref_stack_init()
94 pstack->extension_size = 0; in ref_stack_init()
95 pstack->extension_used = 0; in ref_stack_init()
97 make_int(&pstack->max_stack, avail); in ref_stack_init()
98 pstack->requested = 0; in ref_stack_init()
99 pstack->margin = 0; in ref_stack_init()
100 pstack->body_size = avail; in ref_stack_init()
102 pstack->params = params; in ref_stack_init()
103 pstack->memory = mem; in ref_stack_init()
116 init_block(pstack, pblock_array, 0); in ref_stack_init()
117 refset_null_new(pstack->bot, avail, 0); in ref_stack_init()
124 ref_stack_allow_expansion(ref_stack_t *pstack, bool expand) in ref_stack_allow_expansion() argument
126 pstack->params->allow_expansion = expand; in ref_stack_allow_expansion()
131 ref_stack_set_error_codes(ref_stack_t *pstack, int underflow_error, in ref_stack_set_error_codes() argument
134 pstack->params->underflow_error = underflow_error; in ref_stack_set_error_codes()
135 pstack->params->overflow_error = overflow_error; in ref_stack_set_error_codes()
140 ref_stack_set_max_count(ref_stack_t *pstack, long nmax) in ref_stack_set_max_count() argument
142 uint nmin = ref_stack_count_inline(pstack); in ref_stack_set_max_count()
148 if (!pstack->params->allow_expansion) { in ref_stack_set_max_count()
149 uint ncur = pstack->body_size; in ref_stack_set_max_count()
154 pstack->max_stack.value.intval = nmax; in ref_stack_set_max_count()
163 ref_stack_set_margin(ref_stack_t *pstack, uint margin) in ref_stack_set_margin() argument
165 const ref_stack_params_t *params = pstack->params; in ref_stack_set_margin()
168 if (margin <= pstack->margin) { in ref_stack_set_margin()
169 refset_null_new(pstack->top + 1, pstack->margin - margin, 0); in ref_stack_set_margin()
173 if (pstack->top - pstack->p < margin) { in ref_stack_set_margin()
174 uint used = pstack->p + 1 - pstack->bot; in ref_stack_set_margin()
176 int code = ref_stack_push_block(pstack, keep, used - keep); in ref_stack_set_margin()
182 pstack->margin = margin; in ref_stack_set_margin()
183 pstack->body_size = data_size - margin; in ref_stack_set_margin()
184 pstack->top = pstack->bot + pstack->body_size - 1; in ref_stack_set_margin()
190 ref_stack_count(const ref_stack_t *pstack) in ref_stack_count() argument
192 return ref_stack_count_inline(pstack); in ref_stack_count()
200 ref_stack_index(const ref_stack_t *pstack, long idx) in ref_stack_index() argument
203 uint used = pstack->p + 1 - pstack->bot; in ref_stack_index()
208 return pstack->p - (uint) idx; in ref_stack_index()
209 pblock = (ref_stack_block *) pstack->current.value.refs; in ref_stack_index()
225 ref_stack_counttomark(const ref_stack_t *pstack) in ref_stack_counttomark() argument
230 ref_stack_enum_begin(&rsenum, pstack); in ref_stack_counttomark()
248 ref_stack_store_check(const ref_stack_t *pstack, ref *parray, uint count, in ref_stack_store_check() argument
257 ref_stack_enum_begin(&rsenum, pstack); in ref_stack_store_check()
292 ref_stack_store(const ref_stack_t *pstack, ref *parray, uint count, in ref_stack_store() argument
300 if (count > ref_stack_count(pstack) || count > r_size(parray)) in ref_stack_store()
303 int code = ref_stack_store_check(pstack, parray, count, skip); in ref_stack_store()
310 ref_stack_enum_begin(&rsenum, pstack); in ref_stack_store()
357 ref_stack_pop(ref_stack_t *pstack, uint count) in ref_stack_pop() argument
361 while ((used = pstack->p + 1 - pstack->bot) < count) { in ref_stack_pop()
363 pstack->p = pstack->bot - 1; in ref_stack_pop()
364 ref_stack_pop_block(pstack); in ref_stack_pop()
366 pstack->p -= count; in ref_stack_pop()
371 ref_stack_pop_block(ref_stack_t *pstack) in ref_stack_pop_block() argument
373 s_ptr bot = pstack->bot; in ref_stack_pop_block()
374 uint count = pstack->p + 1 - bot; in ref_stack_pop_block()
376 (ref_stack_block *) pstack->current.value.refs; in ref_stack_pop_block()
384 return_error(pstack->params->underflow_error); in ref_stack_pop_block()
386 body = (ref *) (pnext + 1) + pstack->params->bot_guard; in ref_stack_pop_block()
396 if (used + count > pstack->body_size) { in ref_stack_pop_block()
405 uint moved = pstack->body_size - count; in ref_stack_pop_block()
415 pstack->p = pstack->top; in ref_stack_pop_block()
416 pstack->extension_used -= moved; in ref_stack_pop_block()
424 pstack->bot = bot = body; in ref_stack_pop_block()
425 pstack->top = bot + pstack->body_size - 1; in ref_stack_pop_block()
426 gs_free_ref_array(pstack->memory, &pstack->current, in ref_stack_pop_block()
428 pstack->current = next; in ref_stack_pop_block()
429 pstack->p = bot + (used + count - 1); in ref_stack_pop_block()
430 pstack->extension_size -= pstack->body_size; in ref_stack_pop_block()
431 pstack->extension_used -= used; in ref_stack_pop_block()
441 ref_stack_extend(ref_stack_t *pstack, uint request) in ref_stack_extend() argument
443 uint keep = (pstack->top - pstack->bot + 1) / 3; in ref_stack_extend()
444 uint count = pstack->p - pstack->bot + 1; in ref_stack_extend()
445 const ref_stack_params_t *params = pstack->params; in ref_stack_extend()
449 if (keep + request > pstack->body_size) in ref_stack_extend()
450 keep = pstack->body_size - request; in ref_stack_extend()
453 return ref_stack_push_block(pstack, keep, request); in ref_stack_extend()
463 ref_stack_push(ref_stack_t *pstack, uint count) in ref_stack_push() argument
471 for (; (added = pstack->top - pstack->p) < needed; needed -= added) { in ref_stack_push()
474 pstack->p = pstack->top; in ref_stack_push()
475 code = ref_stack_push_block(pstack, in ref_stack_push()
476 (pstack->top - pstack->bot + 1) / 3, in ref_stack_push()
480 ref_stack_pop(pstack, count - needed + added); in ref_stack_push()
481 pstack->requested = count; in ref_stack_push()
485 pstack->p += needed; in ref_stack_push()
496 ref_stack_push_block(ref_stack_t *pstack, uint keep, uint add) in ref_stack_push_block() argument
498 const ref_stack_params_t *params = pstack->params; in ref_stack_push_block()
499 uint count = pstack->p - pstack->bot + 1; in ref_stack_push_block()
501 ref_stack_block *pcur = (ref_stack_block *) pstack->current.value.refs; in ref_stack_push_block()
511 if (pstack->extension_used + (pstack->top - pstack->bot) + add >= in ref_stack_push_block()
512 pstack->max_stack.value.intval || in ref_stack_push_block()
516 code = gs_alloc_ref_array(pstack->memory, &next, 0, in ref_stack_push_block()
524 init_block(pstack, &next, keep); in ref_stack_push_block()
526 memcpy(body, pstack->bot + move, keep * sizeof(ref)); in ref_stack_push_block()
530 refset_null_new(pstack->bot + move, keep, 0); in ref_stack_push_block()
531 pnext->next = pstack->current; in ref_stack_push_block()
532 pcur->used.value.refs = pstack->bot; in ref_stack_push_block()
534 pstack->current = next; in ref_stack_push_block()
535 pstack->bot = body; in ref_stack_push_block()
536 pstack->top = pstack->bot + pstack->body_size - 1; in ref_stack_push_block()
537 pstack->p = pstack->bot + keep - 1; in ref_stack_push_block()
538 pstack->extension_size += pstack->body_size; in ref_stack_push_block()
539 pstack->extension_used += move; in ref_stack_push_block()
545 ref_stack_enum_begin(ref_stack_enum_t *prse, const ref_stack_t *pstack) in ref_stack_enum_begin() argument
547 prse->block = (ref_stack_block *)pstack->current.value.refs; in ref_stack_enum_begin()
548 prse->ptr = pstack->bot; in ref_stack_enum_begin()
549 prse->size = pstack->p + 1 - pstack->bot; in ref_stack_enum_begin()
567 ref_stack_cleanup(ref_stack_t *pstack) in ref_stack_cleanup() argument
570 (ref_stack_block *) pstack->current.value.refs; in ref_stack_cleanup()
572 refset_null_new(pstack->p + 1, pstack->top - pstack->p, 0); in ref_stack_cleanup()
573 pblock->used = pstack->current; /* set attrs */ in ref_stack_cleanup()
574 pblock->used.value.refs = pstack->bot; in ref_stack_cleanup()
575 r_set_size(&pblock->used, pstack->p + 1 - pstack->bot); in ref_stack_cleanup()
584 ref_stack_release(ref_stack_t *pstack) in ref_stack_release() argument
586 gs_ref_memory_t *mem = pstack->memory; in ref_stack_release()
588 ref_stack_clear(pstack); in ref_stack_release()
590 gs_free_object((gs_memory_t *)mem, pstack->params, in ref_stack_release()
593 gs_free_ref_array(mem, &pstack->current, "ref_stack_release"); in ref_stack_release()
600 ref_stack_free(ref_stack_t *pstack) in ref_stack_free() argument
602 gs_memory_t *mem = (gs_memory_t *)pstack->memory; in ref_stack_free()
604 ref_stack_release(pstack); in ref_stack_free()
605 gs_free_object(mem, pstack, "ref_stack_free"); in ref_stack_free()
612 init_block(ref_stack_t *pstack, const ref *psb, uint used) in init_block() argument
614 ref_stack_params_t *params = pstack->params; in init_block()