Skip to content

Instantly share code, notes, and snippets.

@icholy
Last active August 29, 2015 14:10
Show Gist options
  • Save icholy/50316744ce122fc660f1 to your computer and use it in GitHub Desktop.
Save icholy/50316744ce122fc660f1 to your computer and use it in GitHub Desktop.
typedef struct {
int *data; // array
int cap; // capacity
int len; // length
} Vector;
Vector * vector_create(int length, int capacity) {
Vector *v = malloc(sizeof(Vector));
if (v == NULL) {
return NULL;
}
v->cap = capacity;
v->len = length;
v->data = malloc(sizeof(int)*capacity);
if (v->data == NULL) {
free(v);
return NULL;
}
return v;
}
int vector_delete(Vector *v) {
free(v->data);
free(v);
}
int vector_set(Vector *v, int index, int value) {
if (index >= v->len) {
return -1;
}
v->data[index] = value;
return 0;
}
int vector_get(Vector *v, int index, int **dest) {
if (index >= v->len) {
return -1;
}
*dest = &v->data[index];
return 0;
}
int vector_length(Vector *v) {
return v->len;
}
int vector_capacity(Vector *v) {
return v->cap;
}
int vector_grow(Vector *v, int cap) {
int *data = malloc(sizeof(int) * cap);
if (data == NULL) {
return -1;
}
int i;
for (i = 0; i < v->len; i++) {
data[i] = v->data[i];
}
v->data = data;
v->cap = cap;
return 0;
};
int vector_append(Vector *v, int value) {
if (v->cap == v->len) {
vector_grow(v, v->cap * 2);
}
v->data[v->len] = value;
v->len++;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment