34#include <libFreeWRL.h>
36#include "../vrml_parser/Structs.h"
37#include "../main/headers.h"
48struct Vector* newVector_(
int elSize,
int initSize,
char *fi,
int line) {
52 ret=(
struct Vector *)freewrlMalloc(line,fi,
sizeof(
struct Vector), FALSE);
61 ret->data=(
void *)freewrlMalloc(line+1, fi,elSize*ret->allocn, FALSE);
63 ret->data=MALLOC(
void *, elSize*ret->allocn);
67 ConsoleMessage (
"vector, new %x, data %x, size %d at %s:%d",ret, ret->data, initSize,fi,line);
73void deleteVector_(
int elSize,
struct Vector** myp) {
84 if(me->data) {FREE_IF_NZ(me->data);}
88void vector_clear(
struct Vector* me) {
96 if(me->data) {FREE_IF_NZ(me->data);}
101#if defined(WRAP_MALLOC) || defined(DEBUG_MALLOC)
102void deleteVectorDebug_(
char *file,
int line,
int elSize,
struct Vector** myp) {
111 if(_noisy) printf(
"vector, deleting me %p data %p at %s:%d\n",me,me->data,file,line);
112 if(me->data) {freewrlFree(line,file,me->data);}
113 freewrlFree(line + 1,file,me);
119void vector_ensureSpace_(
int elSize,
struct Vector* me,
char *fi,
int line) {
121 if (me->n > me->allocn)
125 if(me->n == me->allocn) {
139 me->data=freewrlRealloc(line, fi,me->data, elSize*me->allocn);
141 me->data=REALLOC(me->data, elSize*me->allocn);
148 if(_noisy) printf (
"vector, ensureSpace, me %p, data %p\n",me, me->data);
152 ASSERT(me->n<me->allocn);
154void testVector_(
int elSize,
struct Vector* me) {
156 me->data = realloc(me->data, me->allocn * elSize);
159void vector_popBack_(
struct Vector* me,
size_t count)
161 ASSERT(!vector_empty(me));
165 if(_noisy) printf (
"vector, popping back, me 0x%016llx, data 0x%016llx n %zu\n", (
unsigned long long)me, (
unsigned long long)me->data, me->n);
170void vector_shrink_(
int elSize,
struct Vector* me) {
173 ASSERT(me->allocn>=me->n);
174 if(me->n==me->allocn)
return;
178 me->data=REALLOC(oldData, elSize*me->allocn);
181 if(_noisy) printf (
"vector, shrink, me 0x%016llx, data 0x%016llx\n size %zu allocatedSize %zu", (
unsigned long long)me, (
unsigned long long)me->data, me->n, me->allocn);
188 ASSERT(!me->allocn || me->data);
191void* vector_releaseData_(
int elSize,
struct Vector* me) {
194 vector_shrink_(elSize, me);
197 if(_noisy) printf (
"vector, me %p data %p\n",me, me->data);
206void vector_removeElement(
int elSize,
struct Vector* myp,
int element)
210 if(me->data && me->n > 0 && element < me->n && element > -1) {
213 for(i=element;i<me->n;i++){
214 el0 = (
char *)(me->data) + i*elSize;
216 memcpy(el0,el1,elSize);
221 if(_noisy) printf (
"vector, removing element me 0x%016llx data 0x%016llx\n", (
unsigned long long)me, (
unsigned long long)me->data);