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

Side by Side Diff: include/core/SkTDArray.h

Issue 150663014: Change growth function for SkWriter32 (Closed) Base URL: https://skia.googlesource.com/skia.git@no_external_test
Patch Set: Add documentation Created 6 years, 10 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 | src/core/SkWriter32.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 SkTDArray_DEFINED 10 #ifndef SkTDArray_DEFINED
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 } else { 144 } else {
145 SkASSERT(fReserve == 0 && fCount == 0); 145 SkASSERT(fReserve == 0 && fCount == 0);
146 } 146 }
147 } 147 }
148 148
149 void rewind() { 149 void rewind() {
150 // same as setCount(0) 150 // same as setCount(0)
151 fCount = 0; 151 fCount = 0;
152 } 152 }
153 153
154 /**
155 * Sets the number of elements in the array.
156 * If the array does not have space for count elements, it will increase
157 * the storage allocated to some amount greater than that required.
158 * It will never shrink the shrink the storage.
159 */
154 void setCount(int count) { 160 void setCount(int count) {
155 if (count > fReserve) { 161 if (count > fReserve) {
156 this->growBy(count - fCount); 162 this->growBy(count - fCount);
157 } else { 163 } else {
reed1 2014/02/07 17:05:15 This is so hard to read (for me this time at least
158 fCount = count; 164 fCount = count;
159 } 165 }
160 } 166 }
161 167
168 /**
169 * Sets the number of elements in the array.
170 * If the array does not have space for count elements, it will increase
171 * the storage allocated to exactly the amount required, with no remaining
172 * reserved space.
173 * It will never shrink the shrink the storage.
reed1 2014/02/07 17:05:15 ... * this call allows the caller explicit control
174 */
175 void setCountExact(int count) {
176 if (count > fReserve) {
177 this->growTo(count);
178 }
179 fCount = count;
180 }
181
162 void setReserve(int reserve) { 182 void setReserve(int reserve) {
163 if (reserve > fReserve) { 183 if (reserve > fReserve) {
164 SkASSERT(reserve > fCount); 184 SkASSERT(reserve > fCount);
165 int count = fCount; 185 int count = fCount;
166 this->growBy(reserve - fCount); 186 this->growBy(reserve - fCount);
167 fCount = count; 187 fCount = count;
168 } 188 }
169 } 189 }
170 190
171 T* prepend() { 191 T* prepend() {
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 enum { 369 enum {
350 kDebugArraySize = 16 370 kDebugArraySize = 16
351 }; 371 };
352 typedef T ArrayT[kDebugArraySize]; 372 typedef T ArrayT[kDebugArraySize];
353 ArrayT* fData; 373 ArrayT* fData;
354 #endif 374 #endif
355 T* fArray; 375 T* fArray;
356 int fReserve; 376 int fReserve;
357 int fCount; 377 int fCount;
358 378
379 /**
380 * This resizes the storage to *exactly* count elements, growing or
381 * shrinking the allocation as needed. It does not ASSERT anything about
382 * the previous allocation size, or about fCount.
383 */
384 void growTo(int count) {
reed1 2014/02/07 17:05:15 rename to: resizeStorageTo() so we know what's goi
385 fArray = (T*)sk_realloc_throw(fArray, count * sizeof(T));
386 #ifdef SK_DEBUG
387 fData = (ArrayT*)fArray;
388 #endif
389 fReserve = count;
390 }
391
392 /**
393 * Increase the storage allocation such that it can hold (fCount + extra)
394 * elements.
395 * It never shrinks the allocation, and it may increase the allocation by
396 * more than is strictly required, based on a private growth heuristic.
397 */
359 void growBy(int extra) { 398 void growBy(int extra) {
360 SkASSERT(extra); 399 SkASSERT(extra);
361 400
362 if (fCount + extra > fReserve) { 401 if (fCount + extra > fReserve) {
reed1 2014/02/07 17:05:15 Slightly unrelated to this CL, but I feel like we
363 int size = fCount + extra + 4; 402 int count = fCount + extra + 4;
364 size += size >> 2; 403 growTo(count + (count >> 2));
365
366 fArray = (T*)sk_realloc_throw(fArray, size * sizeof(T));
367 #ifdef SK_DEBUG
368 fData = (ArrayT*)fArray;
369 #endif
370 fReserve = size;
371 } 404 }
372 fCount += extra; 405 fCount += extra;
373 } 406 }
374 }; 407 };
375 408
376 #endif 409 #endif
OLDNEW
« no previous file with comments | « no previous file | src/core/SkWriter32.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698