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);
155void vector_popBack_(
struct Vector* me,
size_t count)
157 ASSERT(!vector_empty(me));
161 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);
166void vector_shrink_(
int elSize,
struct Vector* me) {
169 ASSERT(me->allocn>=me->n);
170 if(me->n==me->allocn)
return;
174 me->data=REALLOC(oldData, elSize*me->allocn);
177 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);
184 ASSERT(!me->allocn || me->data);
187void* vector_releaseData_(
int elSize,
struct Vector* me) {
190 vector_shrink_(elSize, me);
193 if(_noisy) printf (
"vector, me %p data %p\n",me, me->data);
202void vector_removeElement(
int elSize,
struct Vector* myp,
int element)
206 if(me->data && me->n > 0 && element < me->n && element > -1) {
209 for(i=element;i<me->n;i++){
210 el0 = (
char *)(me->data) + i*elSize;
212 memcpy(el0,el1,elSize);
217 if(_noisy) printf (
"vector, removing element me 0x%016llx data 0x%016llx\n", (
unsigned long long)me, (
unsigned long long)me->data);