Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > DynArray
comparison DynArray.c @ 17:62b3a4793b6e
chgd files to VMS__malloc and correct includes
| author | Me@portablequad |
|---|---|
| date | Sat, 11 Feb 2012 19:00:21 -0800 |
| parents | 9de0a9369134 |
| children | ef65bdf3ce16 |
comparison
equal
deleted
inserted
replaced
| 10:23429072f207 | 12:3f10cc712ac2 |
|---|---|
| 7 | 7 |
| 8 | 8 |
| 9 #include <stdio.h> | 9 #include <stdio.h> |
| 10 | 10 |
| 11 #include "DynArray.h" | 11 #include "DynArray.h" |
| 12 #include "../vmalloc.h" | |
| 13 | 12 |
| 14 //== declarations | 13 //== declarations |
| 15 void | 14 void |
| 16 increaseSizeOfDynArrayTo_Ext( PrivDynArrayInfo *info, int32 newSize ); | 15 increaseSizeOfDynArrayTo_Ext( PrivDynArrayInfo *info, int32 newSize ); |
| 17 //== | 16 //== |
| 18 | 17 |
| 19 PrivDynArrayInfo * | 18 PrivDynArrayInfo * |
| 20 makePrivDynArrayInfoFrom( void ***addrOfPtrToArray, int32 sizeOfArray ) | 19 makePrivDynArrayInfoFrom( void ***addrOfPtrToArray, int32 sizeOfArray ) |
| 21 { PrivDynArrayInfo *info; | 20 { PrivDynArrayInfo *info; |
| 22 | 21 |
| 23 info = malloc( sizeof(PrivDynArrayInfo) ); | 22 info = VMS__malloc( sizeof(PrivDynArrayInfo) ); |
| 24 | 23 |
| 25 info->addrOfPtrToArray = addrOfPtrToArray; | 24 info->addrOfPtrToArray = addrOfPtrToArray; |
| 26 info->sizeOfArray = sizeOfArray; | 25 info->sizeOfArray = sizeOfArray; |
| 27 info->numInArray = 0; | 26 info->numInArray = 0; |
| 28 return info; | 27 return info; |
| 30 | 29 |
| 31 PrivDynArrayInfo * | 30 PrivDynArrayInfo * |
| 32 makePrivDynArrayOfSize( void ***addrOfPtrToArray, int32 sizeOfArray ) | 31 makePrivDynArrayOfSize( void ***addrOfPtrToArray, int32 sizeOfArray ) |
| 33 { PrivDynArrayInfo *info; | 32 { PrivDynArrayInfo *info; |
| 34 | 33 |
| 35 info = malloc( sizeof(PrivDynArrayInfo) ); | 34 info = VMS__malloc( sizeof(PrivDynArrayInfo) ); |
| 36 | 35 |
| 37 info->addrOfPtrToArray = addrOfPtrToArray; | 36 info->addrOfPtrToArray = addrOfPtrToArray; |
| 38 | 37 |
| 39 *(addrOfPtrToArray) = malloc( sizeOfArray * sizeof(void *) ); | 38 *(addrOfPtrToArray) = VMS__malloc( sizeOfArray * sizeof(void *) ); |
| 40 info->sizeOfArray = sizeOfArray; | 39 info->sizeOfArray = sizeOfArray; |
| 41 info->numInArray = 0; | 40 info->numInArray = 0; |
| 42 return info; | 41 return info; |
| 43 } | 42 } |
| 44 | 43 |
| 138 | 137 |
| 139 oldSizeOfArray = info->sizeOfArray; | 138 oldSizeOfArray = info->sizeOfArray; |
| 140 if( newSize <= oldSizeOfArray ) return; | 139 if( newSize <= oldSizeOfArray ) return; |
| 141 | 140 |
| 142 oldArray = *(info->addrOfPtrToArray); | 141 oldArray = *(info->addrOfPtrToArray); |
| 143 newArray = malloc( newSize * sizeof(void *) ); | 142 newArray = VMS__malloc( newSize * sizeof(void *) ); |
| 144 | 143 |
| 145 for( i = 0; i < oldSizeOfArray; i++ ) | 144 for( i = 0; i < oldSizeOfArray; i++ ) |
| 146 { | 145 { |
| 147 newArray[i] = oldArray[i]; | 146 newArray[i] = oldArray[i]; |
| 148 } | 147 } |
| 149 *(info->addrOfPtrToArray) = newArray; //change location of array-ptr | 148 *(info->addrOfPtrToArray) = newArray; //change location of array-ptr |
| 150 info->sizeOfArray = newSize; | 149 info->sizeOfArray = newSize; |
| 151 | 150 |
| 152 free( oldArray ); | 151 VMS__free( oldArray ); |
| 153 } | 152 } |
| 154 | 153 |
| 155 /*Can't mix malloc locations with external malloc locations -- so use | 154 /*Can't mix VMS__malloc locations with external malloc locations -- so use |
| 156 * this version inside VMS, which will perform normal malloc in the core | 155 * this version inside VMS, which will perform normal malloc in the core |
| 157 * loop -- hopefully avoiding the annoying system-stack bugs.. | 156 * loop -- hopefully avoiding the annoying system-stack bugs.. |
| 158 */ | 157 */ |
| 159 void | 158 void |
| 160 increaseSizeOfDynArrayTo_Ext( PrivDynArrayInfo *info, int32 newSize ) | 159 increaseSizeOfDynArrayTo_Ext( PrivDynArrayInfo *info, int32 newSize ) |
| 182 */ | 181 */ |
| 183 void | 182 void |
| 184 freeDynArrayDeep( PrivDynArrayInfo *info, FreeFnPtr freeFnPtr ) | 183 freeDynArrayDeep( PrivDynArrayInfo *info, FreeFnPtr freeFnPtr ) |
| 185 { | 184 { |
| 186 forAllInDynArrayDo( info, freeFnPtr ); | 185 forAllInDynArrayDo( info, freeFnPtr ); |
| 187 free( *(info->addrOfPtrToArray) ); | 186 VMS__free( *(info->addrOfPtrToArray) ); |
| 188 free( info ); | 187 VMS__free( info ); |
| 189 } | 188 } |
| 190 | 189 |
| 191 /* Only frees the info | 190 /* Only frees the info |
| 192 */ | 191 */ |
| 193 void | 192 void |
| 194 freeDynArrayFlat( PrivDynArrayInfo *info ) | 193 freeDynArrayFlat( PrivDynArrayInfo *info ) |
| 195 { | 194 { |
| 196 free( info ); | 195 VMS__free( info ); |
| 197 } | 196 } |
| 198 | 197 |
| 199 | 198 |
| 200 /*The function has a fixed prototype: takes a void * returns void | 199 /*The function has a fixed prototype: takes a void * returns void |
| 201 * So, the function has to internally cast void * to whatever data struc.. | 200 * So, the function has to internally cast void * to whatever data struc.. |
