Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(80)

Side by Side Diff: include/private/SkTemplates.h

Issue 2084213003: Make container classes in SkTemplates.h more consistent (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Make buffer classes in SkTemplates.h more consistent Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | tests/TemplatesTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 if (count > kCount) { 202 if (count > kCount) {
203 const uint64_t size64 = sk_64_mul(count, sizeof(T)); 203 const uint64_t size64 = sk_64_mul(count, sizeof(T));
204 const size_t size = static_cast<size_t>(size64); 204 const size_t size = static_cast<size_t>(size64);
205 if (size != size64) { 205 if (size != size64) {
206 sk_out_of_memory(); 206 sk_out_of_memory();
207 } 207 }
208 fArray = (T*) sk_malloc_throw(size); 208 fArray = (T*) sk_malloc_throw(size);
209 } else if (count > 0) { 209 } else if (count > 0) {
210 fArray = (T*) fStorage; 210 fArray = (T*) fStorage;
211 } else { 211 } else {
212 SkASSERT(0 == count);
bsalomon 2016/06/23 17:53:34 I think it'd be slightly clearer to just put SkASS
csmartdalton 2016/06/23 18:07:26 Done.
212 fArray = NULL; 213 fArray = NULL;
213 } 214 }
214 215
215 fCount = count; 216 fCount = count;
216 } 217 }
217 218
218 iter = fArray; 219 iter = fArray;
219 T* stop = fArray + count; 220 T* stop = fArray + count;
220 while (iter < stop) { 221 while (iter < stop) {
221 new (iter++) T; 222 new (iter++) T;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 */ 261 */
261 template <typename T> class SkAutoTMalloc : SkNoncopyable { 262 template <typename T> class SkAutoTMalloc : SkNoncopyable {
262 public: 263 public:
263 /** Takes ownership of the ptr. The ptr must be a value which can be passed to sk_free. */ 264 /** Takes ownership of the ptr. The ptr must be a value which can be passed to sk_free. */
264 explicit SkAutoTMalloc(T* ptr = NULL) { 265 explicit SkAutoTMalloc(T* ptr = NULL) {
265 fPtr = ptr; 266 fPtr = ptr;
266 } 267 }
267 268
268 /** Allocates space for 'count' Ts. */ 269 /** Allocates space for 'count' Ts. */
269 explicit SkAutoTMalloc(size_t count) { 270 explicit SkAutoTMalloc(size_t count) {
270 fPtr = (T*)sk_malloc_flags(count * sizeof(T), SK_MALLOC_THROW); 271 fPtr = count ? (T*)sk_malloc_flags(count * sizeof(T), SK_MALLOC_THROW) : nullptr;
271 } 272 }
272 273
273 ~SkAutoTMalloc() { 274 ~SkAutoTMalloc() {
274 sk_free(fPtr); 275 sk_free(fPtr);
275 } 276 }
276 277
277 /** Resize the memory area pointed to by the current ptr preserving contents . */ 278 /** Resize the memory area pointed to by the current ptr preserving contents . */
278 void realloc(size_t count) { 279 void realloc(size_t count) {
279 fPtr = reinterpret_cast<T*>(sk_realloc_throw(fPtr, count * sizeof(T))); 280 fPtr = reinterpret_cast<T*>(sk_realloc_throw(fPtr, count * sizeof(T)));
280 } 281 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 T* fPtr; 320 T* fPtr;
320 }; 321 };
321 322
322 template <size_t kCountRequested, typename T> class SkAutoSTMalloc : SkNoncopyab le { 323 template <size_t kCountRequested, typename T> class SkAutoSTMalloc : SkNoncopyab le {
323 public: 324 public:
324 SkAutoSTMalloc() : fPtr(fTStorage) {} 325 SkAutoSTMalloc() : fPtr(fTStorage) {}
325 326
326 SkAutoSTMalloc(size_t count) { 327 SkAutoSTMalloc(size_t count) {
327 if (count > kCount) { 328 if (count > kCount) {
328 fPtr = (T*)sk_malloc_flags(count * sizeof(T), SK_MALLOC_THROW | SK_M ALLOC_TEMP); 329 fPtr = (T*)sk_malloc_flags(count * sizeof(T), SK_MALLOC_THROW | SK_M ALLOC_TEMP);
330 } else if (count) {
331 fPtr = fTStorage;
329 } else { 332 } else {
330 fPtr = fTStorage; 333 fPtr = nullptr;
331 } 334 }
332 } 335 }
333 336
334 ~SkAutoSTMalloc() { 337 ~SkAutoSTMalloc() {
335 if (fPtr != fTStorage) { 338 if (fPtr != fTStorage) {
336 sk_free(fPtr); 339 sk_free(fPtr);
337 } 340 }
338 } 341 }
339 342
340 // doesn't preserve contents 343 // doesn't preserve contents
341 T* reset(size_t count) { 344 T* reset(size_t count) {
342 if (fPtr != fTStorage) { 345 if (fPtr != fTStorage) {
343 sk_free(fPtr); 346 sk_free(fPtr);
344 } 347 }
345 if (count > kCount) { 348 if (count > kCount) {
346 fPtr = (T*)sk_malloc_throw(count * sizeof(T)); 349 fPtr = (T*)sk_malloc_throw(count * sizeof(T));
350 } else if (count) {
351 fPtr = fTStorage;
347 } else { 352 } else {
348 fPtr = fTStorage; 353 fPtr = nullptr;
349 } 354 }
350 return fPtr; 355 return fPtr;
351 } 356 }
352 357
353 T* get() const { return fPtr; } 358 T* get() const { return fPtr; }
354 359
355 operator T*() { 360 operator T*() {
356 return fPtr; 361 return fPtr;
357 } 362 }
358 363
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 * Returns void* because this object does not initialize the 475 * Returns void* because this object does not initialize the
471 * memory. Use placement new for types that require a cons. 476 * memory. Use placement new for types that require a cons.
472 */ 477 */
473 void* get() { return fStorage.get(); } 478 void* get() { return fStorage.get(); }
474 const void* get() const { return fStorage.get(); } 479 const void* get() const { return fStorage.get(); }
475 private: 480 private:
476 SkAlignedSStorage<sizeof(T)*N> fStorage; 481 SkAlignedSStorage<sizeof(T)*N> fStorage;
477 }; 482 };
478 483
479 #endif 484 #endif
OLDNEW
« no previous file with comments | « no previous file | tests/TemplatesTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698