|
|
@ -1,7 +1,6 @@
|
|
|
|
#include "vector.h"
|
|
|
|
#include "vector.h"
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int __vector_PushPtr(Vector *v, void *elem) {
|
|
|
|
int __vector_PushPtr(Vector *v, void *elem) {
|
|
|
|
if (v->top == v->cap - 1) {
|
|
|
|
if (v->top == v->cap - 1) {
|
|
|
|
Vector_Resize(v, v->cap ? v->cap * 2 : 1);
|
|
|
|
Vector_Resize(v, v->cap ? v->cap * 2 : 1);
|
|
|
@ -12,8 +11,7 @@ int __vector_PushPtr(Vector *v, void *elem) {
|
|
|
|
return v->top;
|
|
|
|
return v->top;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inline int Vector_Get(Vector *v, size_t pos, void *ptr) {
|
|
|
|
int Vector_Get(Vector *v, size_t pos, void *ptr) {
|
|
|
|
|
|
|
|
// return 0 if pos is out of bounds
|
|
|
|
// return 0 if pos is out of bounds
|
|
|
|
if (pos >= v->top) {
|
|
|
|
if (pos >= v->top) {
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
@ -23,6 +21,17 @@ int Vector_Get(Vector *v, size_t pos, void *ptr) {
|
|
|
|
return 1;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Get the element at the end of the vector, decreasing the size by one */
|
|
|
|
|
|
|
|
inline int Vector_Pop(Vector *v, void *ptr) {
|
|
|
|
|
|
|
|
if (v->top > 0) {
|
|
|
|
|
|
|
|
if (ptr != NULL) {
|
|
|
|
|
|
|
|
Vector_Get(v, v->top - 1, ptr);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
v->top--;
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int __vector_PutPtr(Vector *v, size_t pos, void *elem) {
|
|
|
|
int __vector_PutPtr(Vector *v, size_t pos, void *elem) {
|
|
|
|
// resize if pos is out of bounds
|
|
|
|
// resize if pos is out of bounds
|
|
|
@ -38,9 +47,7 @@ int __vector_PutPtr(Vector *v, size_t pos, void *elem) {
|
|
|
|
return 1;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int Vector_Resize(Vector *v, size_t newcap) {
|
|
|
|
int Vector_Resize(Vector *v, size_t newcap) {
|
|
|
|
|
|
|
|
|
|
|
|
int oldcap = v->cap;
|
|
|
|
int oldcap = v->cap;
|
|
|
|
v->cap = newcap;
|
|
|
|
v->cap = newcap;
|
|
|
|
|
|
|
|
|
|
|
@ -55,9 +62,7 @@ int Vector_Resize(Vector *v, size_t newcap) {
|
|
|
|
return v->cap;
|
|
|
|
return v->cap;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Vector *__newVectorSize(size_t elemSize, size_t cap) {
|
|
|
|
Vector *__newVectorSize(size_t elemSize, size_t cap) {
|
|
|
|
|
|
|
|
|
|
|
|
Vector *vec = malloc(sizeof(Vector));
|
|
|
|
Vector *vec = malloc(sizeof(Vector));
|
|
|
|
vec->data = calloc(cap, elemSize);
|
|
|
|
vec->data = calloc(cap, elemSize);
|
|
|
|
vec->top = 0;
|
|
|
|
vec->top = 0;
|
|
|
|