Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > DynArray
comparison DynArray.c @ 32:958dcb7754ca
PR branch -- added comments about safe usage
| author | Sean Halle <seanhalle@yahoo.com> |
|---|---|
| date | Fri, 08 Mar 2013 05:37:45 -0800 |
| parents | e6b21c2350d1 |
| children | 59eaf81a9cc7 |
comparison
equal
deleted
inserted
replaced
| 20:f409c8d53584 | 21:d4187189eac5 |
|---|---|
| 5 */ | 5 */ |
| 6 | 6 |
| 7 | 7 |
| 8 | 8 |
| 9 #include <stdio.h> | 9 #include <stdio.h> |
| 10 #include <malloc.h> | |
| 10 | 11 |
| 11 #include "DynArray.h" | 12 #include "DynArray.h" |
| 12 | 13 |
| 13 //== declarations | 14 //== declarations |
| 14 void | 15 void |
| 43 | 44 |
| 44 PrivDynArrayInfo * | 45 PrivDynArrayInfo * |
| 45 makePrivDynArrayOfSize_Ext( void ***addrOfPtrToArray, int32 sizeOfArray ) | 46 makePrivDynArrayOfSize_Ext( void ***addrOfPtrToArray, int32 sizeOfArray ) |
| 46 { PrivDynArrayInfo *info; | 47 { PrivDynArrayInfo *info; |
| 47 | 48 |
| 48 info = malloc( sizeof(PrivDynArrayInfo) ); | 49 info = (PrivDynArrayInfo*) malloc( sizeof(PrivDynArrayInfo) ); |
| 49 | 50 |
| 50 info->addrOfPtrToArray = addrOfPtrToArray; | 51 info->addrOfPtrToArray = addrOfPtrToArray; |
| 51 | 52 |
| 52 *(addrOfPtrToArray) = malloc( sizeOfArray * sizeof(void *) ); | 53 *(addrOfPtrToArray) = malloc( sizeOfArray * sizeof(void *) ); |
| 53 info->sizeOfArray = sizeOfArray; | 54 info->sizeOfArray = sizeOfArray; |
| 130 | 131 |
| 131 /*Only use this if certain new size is bigger than current size | 132 /*Only use this if certain new size is bigger than current size |
| 132 */ | 133 */ |
| 133 void | 134 void |
| 134 increaseSizeOfDynArrayTo( PrivDynArrayInfo *info, int32 newSize ) | 135 increaseSizeOfDynArrayTo( PrivDynArrayInfo *info, int32 newSize ) |
| 135 { int32 oldSizeOfArray, i; | 136 { int32 oldsizeOfArray, i; |
| 136 void **newArray, **oldArray; | 137 void **newArray, **oldArray; |
| 137 | 138 |
| 138 oldSizeOfArray = info->sizeOfArray; | 139 oldsizeOfArray = info->sizeOfArray; |
| 139 if( newSize <= oldSizeOfArray ) return; | 140 if( newSize <= oldsizeOfArray ) return; |
| 140 | 141 |
| 141 oldArray = *(info->addrOfPtrToArray); | 142 oldArray = *(info->addrOfPtrToArray); |
| 142 newArray = PR_int__malloc( newSize * sizeof(void *) ); | 143 newArray = PR_int__malloc( newSize * sizeof(void *) ); |
| 143 | 144 |
| 144 for( i = 0; i < oldSizeOfArray; i++ ) | 145 for( i = 0; i < oldsizeOfArray; i++ ) |
| 145 { | 146 { |
| 146 newArray[i] = oldArray[i]; | 147 newArray[i] = oldArray[i]; |
| 147 } | 148 } |
| 148 *(info->addrOfPtrToArray) = newArray; //change location of array-ptr | 149 *(info->addrOfPtrToArray) = newArray; //change location of array-ptr |
| 149 info->sizeOfArray = newSize; | 150 info->sizeOfArray = newSize; |
| 155 * this version inside PR, which will perform normal malloc in the core | 156 * this version inside PR, which will perform normal malloc in the core |
| 156 * loop -- hopefully avoiding the annoying system-stack bugs.. | 157 * loop -- hopefully avoiding the annoying system-stack bugs.. |
| 157 */ | 158 */ |
| 158 void | 159 void |
| 159 increaseSizeOfDynArrayTo_Ext( PrivDynArrayInfo *info, int32 newSize ) | 160 increaseSizeOfDynArrayTo_Ext( PrivDynArrayInfo *info, int32 newSize ) |
| 160 { int32 oldSizeOfArray, i; | 161 { int32 oldsizeOfArray, i; |
| 161 void **newArray, **oldArray; | 162 void **newArray, **oldArray; |
| 162 | 163 |
| 163 oldSizeOfArray = info->sizeOfArray; | 164 oldsizeOfArray = info->sizeOfArray; |
| 164 if( newSize <= oldSizeOfArray ) return; | 165 if( newSize <= oldsizeOfArray ) return; |
| 165 | 166 |
| 166 oldArray = *(info->addrOfPtrToArray); | 167 oldArray = *(info->addrOfPtrToArray); |
| 167 newArray = malloc( newSize * sizeof(void *) ); | 168 newArray = malloc( newSize * sizeof(void *) ); |
| 168 | 169 |
| 169 for( i = 0; i < oldSizeOfArray; i++ ) | 170 for( i = 0; i < oldsizeOfArray; i++ ) |
| 170 { | 171 { |
| 171 newArray[i] = oldArray[i]; | 172 newArray[i] = oldArray[i]; |
| 172 } | 173 } |
| 173 *(info->addrOfPtrToArray) = newArray; //change location of array-ptr | 174 *(info->addrOfPtrToArray) = newArray; //change location of array-ptr |
| 174 info->sizeOfArray = newSize; | 175 info->sizeOfArray = newSize; |
