34 #include <libFreeWRL.h>
36 #include "../vrml_parser/Structs.h"
37 #include "../main/headers.h"
41 static int _noisy = 0;
48 struct 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);
73 void deleteVector_(
int elSize,
struct Vector** myp) {
84 if(me->data) {FREE_IF_NZ(me->data);}
88 #if defined(WRAP_MALLOC) || defined(DEBUG_MALLOC)
89 void deleteVectorDebug_(
char *file,
int line,
int elSize,
struct Vector** myp) {
98 if(_noisy) printf(
"vector, deleting me %p data %p at %s:%d\n",me,me->data,file,line);
99 if(me->data) {freewrlFree(line,file,me->data);}
100 freewrlFree(line + 1,file,me);
106 void vector_ensureSpace_(
int elSize,
struct Vector* me,
char *fi,
int line) {
108 if (me->n>me->allocn)
112 if(me->n==me->allocn) {
126 me->data=freewrlRealloc(line, fi,me->data, elSize*me->allocn);
128 me->data=REALLOC(me->data, elSize*me->allocn);
135 if(_noisy) printf (
"vector, ensureSpace, me %p, data %p\n",me, me->data);
139 ASSERT(me->n<me->allocn);
142 void vector_popBack_(
struct Vector* me,
size_t count)
144 ASSERT(!vector_empty(me));
148 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);
153 void vector_shrink_(
int elSize,
struct Vector* me) {
156 ASSERT(me->allocn>=me->n);
157 if(me->n==me->allocn)
return;
161 me->data=REALLOC(oldData, elSize*me->allocn);
164 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);
171 ASSERT(!me->allocn || me->data);
174 void* vector_releaseData_(
int elSize,
struct Vector* me) {
177 vector_shrink_(elSize, me);
180 if(_noisy) printf (
"vector, me %p data %p\n",me, me->data);
189 void vector_removeElement(
int elSize,
struct Vector* myp,
int element)
193 if(me->data && me->n > 0 && element < me->n && element > -1) {
196 for(i=element;i<me->n;i++){
197 el0 = (
char *)(me->data) + i*elSize;
199 memcpy(el0,el1,elSize);
204 if(_noisy) printf (
"vector, removing element me 0x%016llx data 0x%016llx\n", (
unsigned long long)me, (
unsigned long long)me->data);