loa

Virtual machine for the Logic of Assumptions
git clone git://juanmeleiro.mat.br/loa
Log | Files | Refs

stack.c (627B)


      1 #include <stdlib.h>
      2 #include <assert.h>
      3 
      4 #include "stack.h"
      5 
      6 struct stack {
      7 	size_t len;
      8 	size_t cap;
      9 	void **items;
     10 };
     11 
     12 stack*
     13 new_stack(void)
     14 {
     15 	stack *s = malloc(sizeof(stack));
     16 	s->len = 0;
     17 	s->cap = 1;
     18 	s->items = malloc(s->cap*sizeof(void*));
     19 	return s;
     20 }
     21 
     22 void
     23 push(stack* s, void* p)
     24 {
     25 	if (s->len == s->cap)
     26 		s->items = realloc(s->items, sizeof(void*) * (s->cap *= 2));
     27 	assert(s->items);
     28 
     29 	s->items[s->len++] = p;
     30 }
     31 
     32 void* pop(stack* s)
     33 {
     34 	return s->items[--s->len];
     35 }
     36 
     37 void*
     38 peek(stack* s)
     39 {
     40 	if (s->len > 0)
     41 		return s->items[s->len - 1];
     42 	else
     43 		return NULL;
     44 }
     45 
     46 bool
     47 is_empty(stack* s)
     48 {
     49 	return (s->len == 0);
     50 }