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;