| 130 |
130 |
| 131 // determine size and capacity |
131 // determine size and capacity |
| 132 size_t oldcap; |
132 size_t oldcap; |
| 133 size_t oldsize; |
133 size_t oldsize; |
| 134 size_t max_size; |
134 size_t max_size; |
| 135 if (width == 0 || width == CX_WORDSIZE) { |
135 if (width == 0 || width == 8*sizeof(size_t)) { |
| 136 oldcap = *(size_t*) capacity; |
136 oldcap = *(size_t*) capacity; |
| 137 oldsize = *(size_t*) size; |
137 oldsize = *(size_t*) size; |
| 138 max_size = SIZE_MAX; |
138 max_size = SIZE_MAX; |
| 139 } else if (width == 16) { |
139 } else if (width == 16) { |
| 140 oldcap = *(uint16_t*) capacity; |
140 oldcap = *(uint16_t*) capacity; |
| 184 |
184 |
| 185 // store new pointer |
185 // store new pointer |
| 186 *array = newmem; |
186 *array = newmem; |
| 187 |
187 |
| 188 // store new capacity |
188 // store new capacity |
| 189 if (width == 0 || width == CX_WORDSIZE) { |
189 if (width == 0 || width == 8*sizeof(size_t)) { |
| 190 *(size_t*) capacity = newcap; |
190 *(size_t*) capacity = newcap; |
| 191 } else if (width == 16) { |
191 } else if (width == 16) { |
| 192 *(uint16_t*) capacity = (uint16_t) newcap; |
192 *(uint16_t*) capacity = (uint16_t) newcap; |
| 193 } else if (width == 8) { |
193 } else if (width == 8) { |
| 194 *(uint8_t*) capacity = (uint8_t) newcap; |
194 *(uint8_t*) capacity = (uint8_t) newcap; |
| 223 |
223 |
| 224 // determine size and capacity |
224 // determine size and capacity |
| 225 size_t oldcap; |
225 size_t oldcap; |
| 226 size_t oldsize; |
226 size_t oldsize; |
| 227 size_t max_size; |
227 size_t max_size; |
| 228 if (width == 0 || width == CX_WORDSIZE) { |
228 if (width == 0 || width == 8*sizeof(size_t)) { |
| 229 oldcap = *(size_t*) capacity; |
229 oldcap = *(size_t*) capacity; |
| 230 oldsize = *(size_t*) size; |
230 oldsize = *(size_t*) size; |
| 231 max_size = SIZE_MAX; |
231 max_size = SIZE_MAX; |
| 232 } else if (width == 16) { |
232 } else if (width == 16) { |
| 233 oldcap = *(uint16_t*) capacity; |
233 oldcap = *(uint16_t*) capacity; |
| 301 // note: no overflow check here, b/c we cannot get here w/o allocation |
301 // note: no overflow check here, b/c we cannot get here w/o allocation |
| 302 memmove(start, src, elem_count * elem_size); |
302 memmove(start, src, elem_count * elem_size); |
| 303 |
303 |
| 304 // if any of size or capacity changed, store them back |
304 // if any of size or capacity changed, store them back |
| 305 if (newsize != oldsize || newcap != oldcap) { |
305 if (newsize != oldsize || newcap != oldcap) { |
| 306 if (width == 0 || width == CX_WORDSIZE) { |
306 if (width == 0 || width == 8*sizeof(size_t)) { |
| 307 *(size_t*) capacity = newcap; |
307 *(size_t*) capacity = newcap; |
| 308 *(size_t*) size = newsize; |
308 *(size_t*) size = newsize; |
| 309 } else if (width == 16) { |
309 } else if (width == 16) { |
| 310 *(uint16_t*) capacity = (uint16_t) newcap; |
310 *(uint16_t*) capacity = (uint16_t) newcap; |
| 311 *(uint16_t*) size = (uint16_t) newsize; |
311 *(uint16_t*) size = (uint16_t) newsize; |