Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > DynArray
changeset 7:4506c08ed60d VMS__malloc_brch
added external, and "AtLeast"
| author | Me |
|---|---|
| date | Sat, 20 Nov 2010 08:21:49 +0100 |
| parents | f4b108f21041 |
| children | bc91986481e1 |
| files | DynArray.c DynArray.h |
| diffstat | 2 files changed, 32 insertions(+), 6 deletions(-) [+] |
line diff
1.1 --- a/DynArray.c Tue Nov 02 16:44:42 2010 -0700 1.2 +++ b/DynArray.c Sat Nov 20 08:21:49 2010 +0100 1.3 @@ -30,12 +30,25 @@ 1.4 info = VMS__malloc( sizeof(PrivDynArrayInfo) ); 1.5 1.6 info->addrOfPtrToArray = addrOfPtrToArray; 1.7 - 1.8 + 1.9 *(addrOfPtrToArray) = VMS__malloc( sizeOfArray * sizeof(void *) ); 1.10 info->sizeOfArray = sizeOfArray; 1.11 info->numInArray = 0; 1.12 } 1.13 1.14 +PrivDynArrayInfo * 1.15 +makePrivDynArrayOfSize_Ext( void ***addrOfPtrToArray, int32 sizeOfArray ) 1.16 + { PrivDynArrayInfo *info; 1.17 + 1.18 + info = malloc( sizeof(PrivDynArrayInfo) ); 1.19 + 1.20 + info->addrOfPtrToArray = addrOfPtrToArray; 1.21 + 1.22 + *(addrOfPtrToArray) = malloc( sizeOfArray * sizeof(void *) ); 1.23 + info->sizeOfArray = sizeOfArray; 1.24 + info->numInArray = 0; 1.25 + } 1.26 + 1.27 1.28 /*A dynamic array is same as any other array, but add a DynArrayInfo next 1.29 * to it. Accesses and updates of array indexes are done normally, it's 1.30 @@ -65,7 +78,7 @@ 1.31 return numInArray; //pre-incr value is the index put value into 1.32 } 1.33 int32 1.34 -VMS_ext__addToDynArray( void *value, PrivDynArrayInfo *info ) 1.35 +addToDynArray_Ext( void *value, PrivDynArrayInfo *info ) 1.36 { int32 numInArray, sizeOfArray; 1.37 void **array; 1.38 1.39 @@ -74,7 +87,7 @@ 1.40 1.41 if( numInArray >= sizeOfArray ) 1.42 { 1.43 - VMS_ext__increaseSizeOfDynArrayTo( info, sizeOfArray * 2 ); 1.44 + increaseSizeOfDynArrayTo_Ext( info, sizeOfArray * 2 ); 1.45 } 1.46 1.47 array = *(info->addrOfPtrToArray); 1.48 @@ -102,6 +115,13 @@ 1.49 info->numInArray = highestIndex + 1; 1.50 } 1.51 1.52 +void 1.53 +makeHighestDynArrayIndexBeAtLeast(PrivDynArrayInfo *info, int32 index) 1.54 + { 1.55 + if( index < info->numInArray ) return; 1.56 + else makeHighestDynArrayIndexBe( info, index ); 1.57 + } 1.58 + 1.59 1.60 /*Only use this if certain new size is bigger than current size 1.61 */ 1.62 @@ -131,7 +151,7 @@ 1.63 * loop -- hopefully avoiding the annoying system-stack bugs.. 1.64 */ 1.65 void 1.66 -VMS_ext__increaseSizeOfDynArrayTo( PrivDynArrayInfo *info, int32 newSize ) 1.67 +increaseSizeOfDynArrayTo_Ext( PrivDynArrayInfo *info, int32 newSize ) 1.68 { int32 oldSizeOfArray, i; 1.69 void **newArray, **oldArray; 1.70 1.71 @@ -139,7 +159,7 @@ 1.72 if( newSize <= oldSizeOfArray ) return; 1.73 1.74 oldArray = *(info->addrOfPtrToArray); 1.75 - newArray = VMS__malloc_in_ext( newSize * sizeof(void *) ); 1.76 + newArray = malloc( newSize * sizeof(void *) ); 1.77 1.78 for( i = 0; i < oldSizeOfArray; i++ ) 1.79 { 1.80 @@ -148,7 +168,7 @@ 1.81 *(info->addrOfPtrToArray) = newArray; //change location of array-ptr 1.82 info->sizeOfArray = newSize; 1.83 1.84 - VMS__free( oldArray ); 1.85 + free( oldArray ); 1.86 } 1.87 1.88
2.1 --- a/DynArray.h Tue Nov 02 16:44:42 2010 -0700 2.2 +++ b/DynArray.h Sat Nov 20 08:21:49 2010 +0100 2.3 @@ -30,6 +30,9 @@ 2.4 PrivDynArrayInfo * 2.5 makePrivDynArrayOfSize( void ***addrOfPtrToArray, int32 sizeOfArray ); 2.6 2.7 +PrivDynArrayInfo * 2.8 +makePrivDynArrayOfSize_Ext( void ***addrOfPtrToArray, int32 sizeOfArray ); 2.9 + 2.10 int32 2.11 addToDynArray( void *value, PrivDynArrayInfo *info ); 2.12 2.13 @@ -37,6 +40,9 @@ 2.14 makeHighestDynArrayIndexBe( PrivDynArrayInfo *info, int32 highestIndex ); 2.15 2.16 void 2.17 +makeHighestDynArrayIndexBeAtLeast(PrivDynArrayInfo *info,int32 highestIndex); 2.18 + 2.19 +void 2.20 increaseSizeOfDynArrayTo( PrivDynArrayInfo *info, int32 newSize ); 2.21 2.22 typedef void (*FreeFnPtr) ( void * ); //fn has to cast void * to whatever
