OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #ifndef SkTemplates_DEFINED | 10 #ifndef SkTemplates_DEFINED |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 | 243 |
244 /** Destroys previous objects in the array and default constructs count numb
er of objects */ | 244 /** Destroys previous objects in the array and default constructs count numb
er of objects */ |
245 void reset(size_t count) { | 245 void reset(size_t count) { |
246 T* start = fArray; | 246 T* start = fArray; |
247 T* iter = start + fCount; | 247 T* iter = start + fCount; |
248 while (iter > start) { | 248 while (iter > start) { |
249 (--iter)->~T(); | 249 (--iter)->~T(); |
250 } | 250 } |
251 | 251 |
252 if (fCount != count) { | 252 if (fCount != count) { |
253 if (count > N) { | 253 if (fCount > N) { |
| 254 // 'fArray' was allocated last time so free it now |
| 255 SkASSERT((T*) fStorage != fArray); |
254 sk_free(fArray); | 256 sk_free(fArray); |
255 } | 257 } |
256 | 258 |
257 if (count > N) { | 259 if (count > N) { |
258 fArray = (T*) sk_malloc_throw(count * sizeof(T)); | 260 fArray = (T*) sk_malloc_throw(count * sizeof(T)); |
259 } else if (count > 0) { | 261 } else if (count > 0) { |
260 fArray = (T*) fStorage; | 262 fArray = (T*) fStorage; |
261 } else { | 263 } else { |
262 fArray = NULL; | 264 fArray = NULL; |
263 return; | |
264 } | 265 } |
265 | 266 |
266 fCount = count; | 267 fCount = count; |
267 } | 268 } |
268 | 269 |
269 iter = fArray; | 270 iter = fArray; |
270 T* stop = fArray + count; | 271 T* stop = fArray + count; |
271 while (iter < stop) { | 272 while (iter < stop) { |
272 SkNEW_PLACEMENT(iter++, T); | 273 SkNEW_PLACEMENT(iter++, T); |
273 } | 274 } |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 /** | 448 /** |
448 * Returns void* because this object does not initialize the | 449 * Returns void* because this object does not initialize the |
449 * memory. Use placement new for types that require a cons. | 450 * memory. Use placement new for types that require a cons. |
450 */ | 451 */ |
451 void* get() { return fStorage.get(); } | 452 void* get() { return fStorage.get(); } |
452 private: | 453 private: |
453 SkAlignedSStorage<sizeof(T)*N> fStorage; | 454 SkAlignedSStorage<sizeof(T)*N> fStorage; |
454 }; | 455 }; |
455 | 456 |
456 #endif | 457 #endif |
OLD | NEW |