Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > DynArray
comparison DynArray.c @ 35:59eaf81a9cc7
updated headers (fixed circular includes) and PR_int__malloc into PR__malloc
| author | Sean Halle <seanhalle@yahoo.com> |
|---|---|
| date | Tue, 23 Jul 2013 07:41:03 -0700 |
| parents | 958dcb7754ca |
| children | 82b36ebdc648 |
comparison
equal
deleted
inserted
replaced
| 21:d4187189eac5 | 22:9b6b6d554c2d |
|---|---|
| 8 | 8 |
| 9 #include <stdio.h> | 9 #include <stdio.h> |
| 10 #include <malloc.h> | 10 #include <malloc.h> |
| 11 | 11 |
| 12 #include "DynArray.h" | 12 #include "DynArray.h" |
| 13 #include "PR__common_includes/Services_offered_by_PR/Memory_Handling/vmalloc__wrapper_library.h" | |
| 13 | 14 |
| 14 //== declarations | 15 //== declarations |
| 15 void | 16 void |
| 16 increaseSizeOfDynArrayTo_Ext( PrivDynArrayInfo *info, int32 newSize ); | 17 increaseSizeOfDynArrayTo_Ext( PrivDynArrayInfo *info, int32 newSize ); |
| 17 //== | 18 //== |
| 18 | 19 |
| 19 PrivDynArrayInfo * | 20 PrivDynArrayInfo * |
| 20 makePrivDynArrayInfoFrom( void ***addrOfPtrToArray, int32 sizeOfArray ) | 21 makePrivDynArrayInfoFrom( void ***addrOfPtrToArray, int32 sizeOfArray ) |
| 21 { PrivDynArrayInfo *info; | 22 { PrivDynArrayInfo *info; |
| 22 | 23 |
| 23 info = PR_int__malloc( sizeof(PrivDynArrayInfo) ); | 24 info = PR__malloc( sizeof(PrivDynArrayInfo) ); |
| 24 | 25 |
| 25 info->addrOfPtrToArray = addrOfPtrToArray; | 26 info->addrOfPtrToArray = addrOfPtrToArray; |
| 26 info->sizeOfArray = sizeOfArray; | 27 info->sizeOfArray = sizeOfArray; |
| 27 info->numInArray = 0; | 28 info->numInArray = 0; |
| 28 return info; | 29 return info; |
| 30 | 31 |
| 31 PrivDynArrayInfo * | 32 PrivDynArrayInfo * |
| 32 makePrivDynArrayOfSize( void ***addrOfPtrToArray, int32 sizeOfArray ) | 33 makePrivDynArrayOfSize( void ***addrOfPtrToArray, int32 sizeOfArray ) |
| 33 { PrivDynArrayInfo *info; | 34 { PrivDynArrayInfo *info; |
| 34 | 35 |
| 35 info = PR_int__malloc( sizeof(PrivDynArrayInfo) ); | 36 info = PR__malloc( sizeof(PrivDynArrayInfo) ); |
| 36 | 37 |
| 37 info->addrOfPtrToArray = addrOfPtrToArray; | 38 info->addrOfPtrToArray = addrOfPtrToArray; |
| 38 | 39 |
| 39 *(addrOfPtrToArray) = PR_int__malloc( sizeOfArray * sizeof(void *) ); | 40 *(addrOfPtrToArray) = PR__malloc( sizeOfArray * sizeof(void *) ); |
| 40 info->sizeOfArray = sizeOfArray; | 41 info->sizeOfArray = sizeOfArray; |
| 41 info->numInArray = 0; | 42 info->numInArray = 0; |
| 42 return info; | 43 return info; |
| 43 } | 44 } |
| 44 | 45 |
| 138 | 139 |
| 139 oldsizeOfArray = info->sizeOfArray; | 140 oldsizeOfArray = info->sizeOfArray; |
| 140 if( newSize <= oldsizeOfArray ) return; | 141 if( newSize <= oldsizeOfArray ) return; |
| 141 | 142 |
| 142 oldArray = *(info->addrOfPtrToArray); | 143 oldArray = *(info->addrOfPtrToArray); |
| 143 newArray = PR_int__malloc( newSize * sizeof(void *) ); | 144 newArray = PR__malloc( newSize * sizeof(void *) ); |
| 144 | 145 |
| 145 for( i = 0; i < oldsizeOfArray; i++ ) | 146 for( i = 0; i < oldsizeOfArray; i++ ) |
| 146 { | 147 { |
| 147 newArray[i] = oldArray[i]; | 148 newArray[i] = oldArray[i]; |
| 148 } | 149 } |
| 149 *(info->addrOfPtrToArray) = newArray; //change location of array-ptr | 150 *(info->addrOfPtrToArray) = newArray; //change location of array-ptr |
| 150 info->sizeOfArray = newSize; | 151 info->sizeOfArray = newSize; |
| 151 | 152 |
| 152 PR_int__free( oldArray ); | 153 PR__free( oldArray ); |
| 153 } | 154 } |
| 154 | 155 |
| 155 /*Can't mix PR_int__malloc locations with external malloc locations -- so use | 156 /*Can't mix PR__malloc locations with external malloc locations -- so use |
| 156 * this version inside PR, which will perform normal malloc in the core | 157 * this version inside PR, which will perform normal malloc in the core |
| 157 * loop -- hopefully avoiding the annoying system-stack bugs.. | 158 * loop -- hopefully avoiding the annoying system-stack bugs.. |
| 158 */ | 159 */ |
| 159 void | 160 void |
| 160 increaseSizeOfDynArrayTo_Ext( PrivDynArrayInfo *info, int32 newSize ) | 161 increaseSizeOfDynArrayTo_Ext( PrivDynArrayInfo *info, int32 newSize ) |
| 182 */ | 183 */ |
| 183 void | 184 void |
| 184 freeDynArrayDeep( PrivDynArrayInfo *info, FreeFnPtr freeFnPtr ) | 185 freeDynArrayDeep( PrivDynArrayInfo *info, FreeFnPtr freeFnPtr ) |
| 185 { | 186 { |
| 186 forAllInDynArrayDo( info, freeFnPtr ); | 187 forAllInDynArrayDo( info, freeFnPtr ); |
| 187 PR_int__free( *(info->addrOfPtrToArray) ); | 188 PR__free( *(info->addrOfPtrToArray) ); |
| 188 PR_int__free( info ); | 189 PR__free( info ); |
| 189 } | 190 } |
| 190 | 191 |
| 191 /* Only frees the info | 192 /* Only frees the info |
| 192 */ | 193 */ |
| 193 void | 194 void |
| 194 freeDynArrayFlat( PrivDynArrayInfo *info ) | 195 freeDynArrayFlat( PrivDynArrayInfo *info ) |
| 195 { | 196 { |
| 196 PR_int__free( info ); | 197 PR__free( info ); |
| 197 } | 198 } |
| 198 | 199 |
| 199 | 200 |
| 200 /*The function has a fixed prototype: takes a void * returns void | 201 /*The function has a fixed prototype: takes a void * returns void |
| 201 * So, the function has to internally cast void * to whatever data struc.. | 202 * So, the function has to internally cast void * to whatever data struc.. |
