#include "array.h"

struct var_int_array {
	int* data;
	size_t size;
	size_t capacity;
};

varray* var_int_array_new() {
	varray* a = malloc(sizeof(struct var_int_array));
	if (a) {
		a->size = 0;
		a->capacity = 10;
		a->data = malloc(sizeof(int) * a->capacity);

		if (!a->data) {
			free(a);
		}
	}
	return a;
}

void var_int_array_destroy(varray* v) {
	free(v->data);
	free(v);
}

size_t var_int_array_size(const varray* v) {
	return v->size;
}

int var_int_array_append(varray* v, int value) {
	if (v->size == v->capacity) {
		size_t new_cap = v->capacity * 2;
		int* new = realloc(v->data, new_cap);

		if (!new) {
			return 0;
		}

		v->data = new;
		v->capacity = new_cap;
	}

	v->data[v->size++] = value;
	return 1;
}

int var_int_array_pop(varray* v) {
	return v->data[--v->size];
}

int var_int_array_get(const varray* v, size_t idx) {
	return v->data[idx];
}

void var_int_array_put(varray* v, size_t idx, int val) {
	v->data[idx] = val;
}

