Sha256: bf2dabf49ad108088a41346f86362e9b3d8114ebaeec4352effa9d58090ecf7f
Contents?: true
Size: 1.58 KB
Versions: 4
Compression:
Stored size: 1.58 KB
Contents
#include "stack.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include "ruby.h" static void resize_buffer(rs_stack_t *stack) { unsigned int newsize = stack->capacity * 2; rs_stack_frame_t *resized_contents = REALLOC_N(stack->contents, rs_stack_frame_t, newsize); stack->contents = resized_contents; stack->capacity = newsize; } bool rs_stack_full(rs_stack_t *stack) { return stack->top >= stack->capacity - 1; } bool rs_stack_empty(rs_stack_t *stack) { return stack->top < 0; } void rs_stack_push(rs_stack_t *stack, rs_stack_frame_t new_frame) { if (rs_stack_full(stack)) { resize_buffer(stack); } stack->contents[++stack->top] = new_frame; } rs_stack_frame_t rs_stack_pop(rs_stack_t *stack) { if (rs_stack_empty(stack)) { fprintf(stderr, "Stack is empty!\n"); exit(1); } return stack->contents[stack->top--]; } rs_stack_frame_t *rs_stack_peek(rs_stack_t *stack) { if (rs_stack_empty(stack)) { return NULL; } return &stack->contents[stack->top]; } void rs_stack_reset(rs_stack_t *stack) { stack->top = -1; } void rs_stack_free(rs_stack_t *stack) { xfree(stack->contents); stack->contents = NULL; stack->top = -1; stack->capacity = 0; } void rs_stack_init(rs_stack_t *stack, unsigned int capacity) { rs_stack_frame_t *contents = ALLOC_N(rs_stack_frame_t, capacity); stack->contents = contents; stack->capacity = capacity; stack->top = -1; } void rs_stack_mark(rs_stack_t *stack) { for (int i = 0; i <= stack->top; i++) { rs_stack_frame_t *frame = &stack->contents[i]; rs_method_desc_mark(&frame->method); } }
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
rotoscope-0.3.1.pre.1 | ext/rotoscope/stack.c |
rotoscope-0.3.0 | ext/rotoscope/stack.c |
rotoscope-0.3.0.pre.9 | ext/rotoscope/stack.c |
rotoscope-0.3.0.pre.8 | ext/rotoscope/stack.c |