added vector_pop

master
Dvir Volk 8 years ago
parent 7fe938d82e
commit 23896a8a10

@ -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;

@ -37,6 +37,9 @@ int __vector_PutPtr(Vector *v, size_t pos, void *elem);
*/ */
int Vector_Get(Vector *v, size_t pos, void *ptr); int Vector_Get(Vector *v, size_t pos, void *ptr);
/* Get the element at the end of the vector, decreasing the size by one */
int Vector_Pop(Vector *v, void *ptr);
//#define Vector_Getx(v, pos, ptr) pos < v->cap ? 1 : 0; *ptr = //#define Vector_Getx(v, pos, ptr) pos < v->cap ? 1 : 0; *ptr =
//*(typeof(ptr))(v->data + v->elemSize*pos) //*(typeof(ptr))(v->data + v->elemSize*pos)

Loading…
Cancel
Save