Index: include/core/SkTemplates.h |
diff --git a/include/core/SkTemplates.h b/include/core/SkTemplates.h |
index e8a8b61ec88d58c73558bf038791e87f57d67934..49940027609945c9258057a68c45bf8f08d5ca8d 100644 |
--- a/include/core/SkTemplates.h |
+++ b/include/core/SkTemplates.h |
@@ -228,9 +228,36 @@ private: |
*/ |
template <size_t N, typename T> class SkAutoSTArray : SkNoncopyable { |
public: |
+ /** Initialize with no objects */ |
+ SkAutoSTArray() { |
+ fArray = NULL; |
+ fCount = 0; |
+ } |
+ |
/** Allocate count number of T elements |
*/ |
SkAutoSTArray(size_t count) { |
+ fArray = NULL; |
+ fCount = 0; |
+ this->reset(count); |
+ } |
+ |
+ ~SkAutoSTArray() { |
+ this->reset(0); |
+ } |
+ |
+ /** Destroys previous objects in the array and default constructs count number of objects */ |
+ void reset(size_t count) { |
+ T* start = fArray; |
+ T* iter = start + fCount; |
+ while (iter > start) { |
+ (--iter)->~T(); |
+ } |
+ |
robertphillips
2013/06/13 14:52:42
could recycle the memory if "fCount > count && cou
bsalomon
2013/06/13 15:03:29
Done, but only for exact fit. Not sure how much ex
|
+ if (fCount > N) { |
+ sk_free(fArray); |
+ } |
+ |
fCount = count; |
if (count > N) { |
fArray = (T*) sk_malloc_throw(count * sizeof(T)); |
@@ -240,24 +267,13 @@ public: |
fArray = NULL; |
return; |
} |
- T* iter = fArray; |
+ iter = fArray; |
T* stop = fArray + count; |
while (iter < stop) { |
SkNEW_PLACEMENT(iter++, T); |
} |
} |
- ~SkAutoSTArray() { |
- T* start = fArray; |
- T* iter = start + fCount; |
- while (iter > start) { |
- (--iter)->~T(); |
- } |
- if (fCount > N) { |
- sk_free(fArray); |
- } |
- } |
- |
/** Return the number of T elements in the array |
*/ |
size_t count() const { return fCount; } |