Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #ifndef SkTArray_DEFINED | 8 #ifndef SkTArray_DEFINED |
| 9 #define SkTArray_DEFINED | 9 #define SkTArray_DEFINED |
| 10 | 10 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 46 self->fItemArray[i].~T(); | 46 self->fItemArray[i].~T(); |
| 47 } | 47 } |
| 48 } | 48 } |
| 49 | 49 |
| 50 } | 50 } |
| 51 | 51 |
| 52 template <typename T, bool MEM_COPY> void* operator new(size_t, SkTArray<T, MEM_ COPY>*, int); | 52 template <typename T, bool MEM_COPY> void* operator new(size_t, SkTArray<T, MEM_ COPY>*, int); |
| 53 | 53 |
| 54 /** When MEM_COPY is true T will be bit copied when moved. | 54 /** When MEM_COPY is true T will be bit copied when moved. |
| 55 When MEM_COPY is false, T will be copy constructed / destructed. | 55 When MEM_COPY is false, T will be copy constructed / destructed. |
| 56 In all cases T's constructor will be called on allocation, | 56 In all cases T will be default-initialized on allocation, |
| 57 and its destructor will be called from this object's destructor. | 57 and its destructor will be called from this object's destructor. |
| 58 */ | 58 */ |
| 59 template <typename T, bool MEM_COPY> class SkTArray { | 59 template <typename T, bool MEM_COPY> class SkTArray { |
| 60 public: | 60 public: |
| 61 /** | 61 /** |
| 62 * Creates an empty array with no initial storage | 62 * Creates an empty array with no initial storage |
| 63 */ | 63 */ |
| 64 SkTArray() { | 64 SkTArray() { |
| 65 fCount = 0; | 65 fCount = 0; |
| 66 fReserveCount = gMIN_ALLOC_COUNT; | 66 fReserveCount = gMIN_ALLOC_COUNT; |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 166 * Number of elements in the array. | 166 * Number of elements in the array. |
| 167 */ | 167 */ |
| 168 int count() const { return fCount; } | 168 int count() const { return fCount; } |
| 169 | 169 |
| 170 /** | 170 /** |
| 171 * Is the array empty. | 171 * Is the array empty. |
| 172 */ | 172 */ |
| 173 bool empty() const { return !fCount; } | 173 bool empty() const { return !fCount; } |
| 174 | 174 |
| 175 /** | 175 /** |
| 176 * Adds 1 new default-constructed T value and returns in by reference. Note | 176 * Adds 1 new default-initialized T value and returns it by reference. Note |
| 177 * the reference only remains valid until the next call that adds or removes | 177 * the reference only remains valid until the next call that adds or removes |
| 178 * elements. | 178 * elements. |
| 179 */ | 179 */ |
| 180 T& push_back() { | 180 T& push_back() { |
| 181 T* newT = reinterpret_cast<T*>(this->push_back_raw(1)); | 181 T* newT = reinterpret_cast<T*>(this->push_back_raw(1)); |
| 182 SkNEW_PLACEMENT(newT, T); | 182 SkNEW_PLACEMENT(newT, T); |
| 183 return *newT; | 183 return *newT; |
| 184 } | 184 } |
| 185 | 185 |
| 186 /** | 186 /** |
| 187 * Version of above that uses a copy constructor to initialize the new item | 187 * Version of above that uses a copy constructor to initialize the new item |
| 188 */ | 188 */ |
| 189 T& push_back(const T& t) { | 189 T& push_back(const T& t) { |
| 190 T* newT = reinterpret_cast<T*>(this->push_back_raw(1)); | 190 T* newT = reinterpret_cast<T*>(this->push_back_raw(1)); |
| 191 SkNEW_PLACEMENT_ARGS(newT, T, (t)); | 191 SkNEW_PLACEMENT_ARGS(newT, T, (t)); |
| 192 return *newT; | 192 return *newT; |
| 193 } | 193 } |
| 194 | 194 |
| 195 /** | 195 /** |
| 196 * Allocates n more default T values, and returns the address of the start | 196 * Allocates n more default-initialized T values, and returns the address of |
| 197 * of that new range. Note: this address is only valid until the next API | 197 * the start of that new range. Note: this address is only valid until the |
| 198 * call made on the array that might add or remove elements. | 198 * next API call made on the array that might add or remove elements. |
| 199 */ | 199 */ |
| 200 T* push_back_n(int n) { | 200 T* push_back_n(int n) { |
| 201 SkASSERT(n >= 0); | 201 SkASSERT(n >= 0); |
| 202 T* newTs = reinterpret_cast<T*>(this->push_back_raw(n)); | 202 T* newTs = reinterpret_cast<T*>(this->push_back_raw(n)); |
| 203 for (int i = 0; i < n; ++i) { | 203 for (int i = 0; i < n; ++i) { |
| 204 SkNEW_PLACEMENT(newTs + i, T); | 204 SkNEW_PLACEMENT(newTs + i, T); |
| 205 } | 205 } |
| 206 return newTs; | 206 return newTs; |
| 207 } | 207 } |
| 208 | 208 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 250 SkASSERT(n >= 0); | 250 SkASSERT(n >= 0); |
| 251 SkASSERT(fCount >= n); | 251 SkASSERT(fCount >= n); |
| 252 fCount -= n; | 252 fCount -= n; |
| 253 for (int i = 0; i < n; ++i) { | 253 for (int i = 0; i < n; ++i) { |
| 254 fItemArray[fCount + i].~T(); | 254 fItemArray[fCount + i].~T(); |
| 255 } | 255 } |
| 256 this->checkRealloc(0); | 256 this->checkRealloc(0); |
| 257 } | 257 } |
| 258 | 258 |
| 259 /** | 259 /** |
| 260 * Pushes or pops from the back to resize. Pushes will be default | 260 * Pushes or pops from the back to resize. Pushes will be default |
|
bungeman-skia
2014/03/24 15:45:48
Interestingly, this comment is actually already co
| |
| 261 * initialized. | 261 * initialized. |
| 262 */ | 262 */ |
| 263 void resize_back(int newCount) { | 263 void resize_back(int newCount) { |
| 264 SkASSERT(newCount >= 0); | 264 SkASSERT(newCount >= 0); |
| 265 | 265 |
| 266 if (newCount > fCount) { | 266 if (newCount > fCount) { |
| 267 this->push_back_n(newCount - fCount); | 267 this->push_back_n(newCount - fCount); |
| 268 } else if (newCount < fCount) { | 268 } else if (newCount < fCount) { |
| 269 this->pop_back_n(fCount - newCount); | 269 this->pop_back_n(fCount - newCount); |
| 270 } | 270 } |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 520 SkSTArray& operator= (const INHERITED& array) { | 520 SkSTArray& operator= (const INHERITED& array) { |
| 521 INHERITED::operator=(array); | 521 INHERITED::operator=(array); |
| 522 return *this; | 522 return *this; |
| 523 } | 523 } |
| 524 | 524 |
| 525 private: | 525 private: |
| 526 SkAlignedSTStorage<N,T> fStorage; | 526 SkAlignedSTStorage<N,T> fStorage; |
| 527 }; | 527 }; |
| 528 | 528 |
| 529 #endif | 529 #endif |
| OLD | NEW |