|
|
@ -14,35 +14,39 @@ int __vector_PushPtr(Vector *v, void *elem) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int Vector_Get(Vector *v, int pos, void *ptr) {
|
|
|
|
int Vector_Get(Vector *v, int pos, void *ptr) {
|
|
|
|
|
|
|
|
// return 0 if pos is out of bounds
|
|
|
|
if (pos >= v->top) {
|
|
|
|
if (pos >= v->top) {
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
memcpy(ptr, v->data + (pos * v->elemSize), v->elemSize);
|
|
|
|
memcpy(ptr, v->data + (pos * v->elemSize), v->elemSize);
|
|
|
|
return 1;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int __vector_PutPtr(Vector *v, int pos, void *elem) {
|
|
|
|
int __vector_PutPtr(Vector *v, int pos, void *elem) {
|
|
|
|
if (pos > v->cap) {
|
|
|
|
// resize if pos is out of bounds
|
|
|
|
|
|
|
|
if (pos >= v->cap) {
|
|
|
|
Vector_Resize(v, pos+1);
|
|
|
|
Vector_Resize(v, pos+1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
memcpy(v->data + pos*v->elemSize, elem, v->elemSize);
|
|
|
|
memcpy(v->data + pos*v->elemSize, elem, v->elemSize);
|
|
|
|
|
|
|
|
// move the end offset to pos if we grew
|
|
|
|
if (pos > v->top) {
|
|
|
|
if (pos > v->top) {
|
|
|
|
v->top = pos;
|
|
|
|
v->top = pos;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//printf("v: %s",v->data);
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int Vector_Resize(Vector *v, int newcap) {
|
|
|
|
int Vector_Resize(Vector *v, int newcap) {
|
|
|
|
|
|
|
|
|
|
|
|
int oldcap = v->cap;
|
|
|
|
int oldcap = v->cap;
|
|
|
|
v->cap = newcap;
|
|
|
|
v->cap = newcap;
|
|
|
|
|
|
|
|
|
|
|
|
v->data = realloc(v->data, v->cap*v->elemSize);
|
|
|
|
v->data = realloc(v->data, v->cap*v->elemSize);
|
|
|
|
int offset = v->top*v->elemSize;
|
|
|
|
int offset = v->top*v->elemSize;
|
|
|
|
|
|
|
|
// put all zeros at the newly realloc'd part of the vector
|
|
|
|
memset(v->data + offset, 0, v->cap*v->elemSize - offset);
|
|
|
|
memset(v->data + offset, 0, v->cap*v->elemSize - offset);
|
|
|
|
return v->cap;
|
|
|
|
return v->cap;
|
|
|
|
}
|
|
|
|
}
|
|
|
|