# HG changeset patch # User Me # Date 1290237709 -3600 # Node ID 4506c08ed60d24bc4adfde6eb947578816c8ef5e # Parent f4b108f21041c4da862c4313d2d38853dcbae694 added external, and "AtLeast" diff -r f4b108f21041 -r 4506c08ed60d DynArray.c --- a/DynArray.c Tue Nov 02 16:44:42 2010 -0700 +++ b/DynArray.c Sat Nov 20 08:21:49 2010 +0100 @@ -30,12 +30,25 @@ info = VMS__malloc( sizeof(PrivDynArrayInfo) ); info->addrOfPtrToArray = addrOfPtrToArray; - + *(addrOfPtrToArray) = VMS__malloc( sizeOfArray * sizeof(void *) ); info->sizeOfArray = sizeOfArray; info->numInArray = 0; } +PrivDynArrayInfo * +makePrivDynArrayOfSize_Ext( void ***addrOfPtrToArray, int32 sizeOfArray ) + { PrivDynArrayInfo *info; + + info = malloc( sizeof(PrivDynArrayInfo) ); + + info->addrOfPtrToArray = addrOfPtrToArray; + + *(addrOfPtrToArray) = malloc( sizeOfArray * sizeof(void *) ); + info->sizeOfArray = sizeOfArray; + info->numInArray = 0; + } + /*A dynamic array is same as any other array, but add a DynArrayInfo next * to it. Accesses and updates of array indexes are done normally, it's @@ -65,7 +78,7 @@ return numInArray; //pre-incr value is the index put value into } int32 -VMS_ext__addToDynArray( void *value, PrivDynArrayInfo *info ) +addToDynArray_Ext( void *value, PrivDynArrayInfo *info ) { int32 numInArray, sizeOfArray; void **array; @@ -74,7 +87,7 @@ if( numInArray >= sizeOfArray ) { - VMS_ext__increaseSizeOfDynArrayTo( info, sizeOfArray * 2 ); + increaseSizeOfDynArrayTo_Ext( info, sizeOfArray * 2 ); } array = *(info->addrOfPtrToArray); @@ -102,6 +115,13 @@ info->numInArray = highestIndex + 1; } +void +makeHighestDynArrayIndexBeAtLeast(PrivDynArrayInfo *info, int32 index) + { + if( index < info->numInArray ) return; + else makeHighestDynArrayIndexBe( info, index ); + } + /*Only use this if certain new size is bigger than current size */ @@ -131,7 +151,7 @@ * loop -- hopefully avoiding the annoying system-stack bugs.. */ void -VMS_ext__increaseSizeOfDynArrayTo( PrivDynArrayInfo *info, int32 newSize ) +increaseSizeOfDynArrayTo_Ext( PrivDynArrayInfo *info, int32 newSize ) { int32 oldSizeOfArray, i; void **newArray, **oldArray; @@ -139,7 +159,7 @@ if( newSize <= oldSizeOfArray ) return; oldArray = *(info->addrOfPtrToArray); - newArray = VMS__malloc_in_ext( newSize * sizeof(void *) ); + newArray = malloc( newSize * sizeof(void *) ); for( i = 0; i < oldSizeOfArray; i++ ) { @@ -148,7 +168,7 @@ *(info->addrOfPtrToArray) = newArray; //change location of array-ptr info->sizeOfArray = newSize; - VMS__free( oldArray ); + free( oldArray ); } diff -r f4b108f21041 -r 4506c08ed60d DynArray.h --- a/DynArray.h Tue Nov 02 16:44:42 2010 -0700 +++ b/DynArray.h Sat Nov 20 08:21:49 2010 +0100 @@ -30,6 +30,9 @@ PrivDynArrayInfo * makePrivDynArrayOfSize( void ***addrOfPtrToArray, int32 sizeOfArray ); +PrivDynArrayInfo * +makePrivDynArrayOfSize_Ext( void ***addrOfPtrToArray, int32 sizeOfArray ); + int32 addToDynArray( void *value, PrivDynArrayInfo *info ); @@ -37,6 +40,9 @@ makeHighestDynArrayIndexBe( PrivDynArrayInfo *info, int32 highestIndex ); void +makeHighestDynArrayIndexBeAtLeast(PrivDynArrayInfo *info,int32 highestIndex); + +void increaseSizeOfDynArrayTo( PrivDynArrayInfo *info, int32 newSize ); typedef void (*FreeFnPtr) ( void * ); //fn has to cast void * to whatever