| Index: include/core/SkTDArray.h
|
| diff --git a/include/core/SkTDArray.h b/include/core/SkTDArray.h
|
| index e51f2cd008e5ad07f451377c3ebaedcd4421fdd2..67254ccc9a88fa93fe6489ea82bccb6efe8959e6 100644
|
| --- a/include/core/SkTDArray.h
|
| +++ b/include/core/SkTDArray.h
|
| @@ -151,43 +151,25 @@
|
| fCount = 0;
|
| }
|
|
|
| - /**
|
| - * Sets the number of elements in the array.
|
| - * If the array does not have space for count elements, it will increase
|
| - * the storage allocated to some amount greater than that required.
|
| - * It will never shrink the shrink the storage.
|
| - */
|
| void setCount(int count) {
|
| - // TODO(mtklein): eliminate this method, setCountExact -> setCount
|
| - SkASSERT(count >= 0);
|
| if (count > fReserve) {
|
| - resizeStorageToAtLeast(count);
|
| - }
|
| - fCount = count;
|
| - }
|
| -
|
| - /**
|
| - * Sets the number of elements in the array.
|
| - * If the array does not have space for count elements, it will increase
|
| - * the storage allocated to exactly the amount required, with no remaining
|
| - * reserved space.
|
| - * It will never shrink the shrink the storage.
|
| - */
|
| - void setCountExact(int count) {
|
| - if (count > fReserve) {
|
| - this->resizeStorageToExact(count);
|
| - }
|
| - fCount = count;
|
| + this->growBy(count - fCount);
|
| + } else {
|
| + fCount = count;
|
| + }
|
| }
|
|
|
| void setReserve(int reserve) {
|
| if (reserve > fReserve) {
|
| - resizeStorageToAtLeast(reserve);
|
| + SkASSERT(reserve > fCount);
|
| + int count = fCount;
|
| + this->growBy(reserve - fCount);
|
| + fCount = count;
|
| }
|
| }
|
|
|
| T* prepend() {
|
| - this->adjustCount(1);
|
| + this->growBy(1);
|
| memmove(fArray + 1, fArray, (fCount - 1) * sizeof(T));
|
| return fArray;
|
| }
|
| @@ -201,7 +183,7 @@
|
| SkASSERT(src == NULL || fArray == NULL ||
|
| src + count <= fArray || fArray + oldCount <= src);
|
|
|
| - this->adjustCount(count);
|
| + this->growBy(count);
|
| if (src) {
|
| memcpy(fArray + oldCount, src, sizeof(T) * count);
|
| }
|
| @@ -222,7 +204,7 @@
|
| SkASSERT(count);
|
| SkASSERT(index <= fCount);
|
| size_t oldCount = fCount;
|
| - this->adjustCount(count);
|
| + this->growBy(count);
|
| T* dst = fArray + index;
|
| memmove(dst + count, dst, sizeof(T) * (oldCount - index));
|
| if (src) {
|
| @@ -374,43 +356,20 @@
|
| int fReserve;
|
| int fCount;
|
|
|
| - /**
|
| - * Adjusts the number of elements in the array.
|
| - * This is the same as calling setCount(count() + delta).
|
| - */
|
| - void adjustCount(int delta) {
|
| - setCount(fCount + delta);
|
| - }
|
| -
|
| - /**
|
| - * This resizes the storage to *exactly* count elements, growing or
|
| - * shrinking the allocation as needed. It does not ASSERT anything about
|
| - * the previous allocation size, or about fCount.
|
| - *
|
| - * note: does NOT modify fCount
|
| - */
|
| - void resizeStorageToExact(int count) {
|
| - SkASSERT(count >= 0);
|
| - fArray = (T*)sk_realloc_throw(fArray, count * sizeof(T));
|
| -#ifdef SK_DEBUG
|
| - fData = (ArrayT*)fArray;
|
| -#endif
|
| - fReserve = count;
|
| - }
|
| -
|
| - /**
|
| - * Increase the storage allocation such that it can hold (fCount + extra)
|
| - * elements.
|
| - * It never shrinks the allocation, and it may increase the allocation by
|
| - * more than is strictly required, based on a private growth heuristic.
|
| - *
|
| - * note: does NOT modify fCount
|
| - */
|
| - void resizeStorageToAtLeast(int count) {
|
| - SkASSERT(count > fReserve);
|
| - int space = count + 4;
|
| - space += space>>2;
|
| - resizeStorageToExact(space);
|
| + void growBy(int extra) {
|
| + SkASSERT(extra);
|
| +
|
| + if (fCount + extra > fReserve) {
|
| + int size = fCount + extra + 4;
|
| + size += size >> 2;
|
| +
|
| + fArray = (T*)sk_realloc_throw(fArray, size * sizeof(T));
|
| +#ifdef SK_DEBUG
|
| + fData = (ArrayT*)fArray;
|
| +#endif
|
| + fReserve = size;
|
| + }
|
| + fCount += extra;
|
| }
|
| };
|
|
|
|
|