Me@22: /* Me@22: * File: Vector.h Me@22: * Author: Me Me@22: * Me@22: * Created on May 14, 2010, 3:08 PM Me@22: */ Me@22: Me@22: #ifndef _DYNARRAY_H Me@22: #define _DYNARRAY_H Me@22: Me@22: Me@22: //A dynamic array is same as any other array, but add a DynArrayInfo next Me@22: // to it. Accesses and updates of array indexes are done normally, it's Me@22: // only when add a new element into array that use the extra info. Me@22: // An add can cause the pointer to the normal array to change.. so must Me@22: // be protected to single VP at a time. Me@22: typedef struct Me@22: { Me@22: void ***addrOfPtrToArray; //addr of array of ptrs == triple * Me@22: int32 numInArray; Me@22: int32 sizeOfArray; Me@22: } Me@22: PrivDynArrayInfo; Me@22: Me@22: PrivDynArrayInfo * Me@22: makePrivDynArrayInfoFrom( void ***addrOfPtrToArray, int32 sizeOfArray ); Me@22: Me@22: PrivDynArrayInfo * Me@22: makePrivDynArrayOfSize( void ***addrOfPtrToArray, int32 sizeOfArray ); Me@22: Me@22: PrivDynArrayInfo * Me@22: makePrivDynArrayOfSize_Ext( void ***addrOfPtrToArray, int32 sizeOfArray ); Me@22: Me@22: int32 Me@22: addToDynArray( void *value, PrivDynArrayInfo *info ); Me@22: Me@22: void Me@22: makeHighestDynArrayIndexBe( PrivDynArrayInfo *info, int32 highestIndex ); Me@22: Me@22: void Me@22: makeHighestDynArrayIndexBeAtLeast(PrivDynArrayInfo *info,int32 highestIndex); Me@22: Me@22: void Me@22: increaseSizeOfDynArrayTo( PrivDynArrayInfo *info, int32 newSize ); Me@22: Me@22: typedef void (*FreeFnPtr) ( void * ); //fn has to cast void * to whatever Me@22: Me@22: void Me@22: freeDynArrayDeep( PrivDynArrayInfo *info, FreeFnPtr freeFnPtr ); Me@22: Me@22: void Me@22: freeDynArrayFlat( PrivDynArrayInfo *info ); Me@22: Me@22: Me@22: typedef void (*DynArrayFnPtr) ( void * ); //fn has to cast void * Me@22: Me@22: void Me@22: forAllInDynArrayDo( PrivDynArrayInfo *info, DynArrayFnPtr fnPtr ); Me@22: Me@22: #endif /* _DYNARRAY_H */ Me@22: