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

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

Issue 27487003: Third wave of Win64 warning cleanup (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Got compiling on linux Created 7 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « gm/texteffects.cpp ('k') | src/gpu/gl/GrGLBufferImpl.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
11 #define SkTDArray_DEFINED 11 #define SkTDArray_DEFINED
12 12
13 #include "SkTypes.h" 13 #include "SkTypes.h"
14 14
15 template <typename T> class SK_API SkTDArray { 15 template <typename T> class SK_API SkTDArray {
16 public: 16 public:
17 SkTDArray() { 17 SkTDArray() {
18 fReserve = fCount = 0; 18 fReserve = fCount = 0;
19 fArray = NULL; 19 fArray = NULL;
20 #ifdef SK_DEBUG 20 #ifdef SK_DEBUG
21 fData = NULL; 21 fData = NULL;
22 #endif 22 #endif
23 } 23 }
24 SkTDArray(const T src[], size_t count) { 24 SkTDArray(const T src[], int count) {
25 SkASSERT(src || count == 0); 25 SkASSERT(src || count == 0);
26 26
27 fReserve = fCount = 0; 27 fReserve = fCount = 0;
28 fArray = NULL; 28 fArray = NULL;
29 #ifdef SK_DEBUG 29 #ifdef SK_DEBUG
30 fData = NULL; 30 fData = NULL;
31 #endif 31 #endif
32 if (count) { 32 if (count) {
33 fArray = (T*)sk_malloc_throw(count * sizeof(T)); 33 fArray = (T*)sk_malloc_throw(count * sizeof(T));
34 #ifdef SK_DEBUG 34 #ifdef SK_DEBUG
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 fReserve = fCount = 0; 91 fReserve = fCount = 0;
92 SkDEBUGCODE(fData = NULL;) 92 SkDEBUGCODE(fData = NULL;)
93 return array; 93 return array;
94 } 94 }
95 95
96 bool isEmpty() const { return fCount == 0; } 96 bool isEmpty() const { return fCount == 0; }
97 97
98 /** 98 /**
99 * Return the number of elements in the array 99 * Return the number of elements in the array
100 */ 100 */
101 int count() const { return (int)fCount; } 101 int count() const { return fCount; }
102 102
103 /** 103 /**
104 * return the number of bytes in the array: count * sizeof(T) 104 * return the number of bytes in the array: count * sizeof(T)
105 */ 105 */
106 size_t bytes() const { return fCount * sizeof(T); } 106 size_t bytes() const { return fCount * sizeof(T); }
107 107
108 T* begin() { return fArray; } 108 T* begin() { return fArray; }
109 const T* begin() const { return fArray; } 109 const T* begin() const { return fArray; }
110 T* end() { return fArray ? fArray + fCount : NULL; } 110 T* end() { return fArray ? fArray + fCount : NULL; }
111 const T* end() const { return fArray ? fArray + fCount : NULL; } 111 const T* end() const { return fArray ? fArray + fCount : NULL; }
112 112
113 T& operator[](int index) { 113 T& operator[](int index) {
114 SkASSERT((unsigned)index < fCount); 114 SkASSERT(index < fCount);
115 return fArray[index]; 115 return fArray[index];
116 } 116 }
117 const T& operator[](int index) const { 117 const T& operator[](int index) const {
118 SkASSERT((unsigned)index < fCount); 118 SkASSERT(index < fCount);
119 return fArray[index]; 119 return fArray[index];
120 } 120 }
121 121
122 T& getAt(int index) { 122 T& getAt(int index) {
123 return (*this)[index]; 123 return (*this)[index];
124 } 124 }
125 const T& getAt(int index) const { 125 const T& getAt(int index) const {
126 return (*this)[index]; 126 return (*this)[index];
127 } 127 }
128 128
129 void reset() { 129 void reset() {
130 if (fArray) { 130 if (fArray) {
131 sk_free(fArray); 131 sk_free(fArray);
132 fArray = NULL; 132 fArray = NULL;
133 #ifdef SK_DEBUG 133 #ifdef SK_DEBUG
134 fData = NULL; 134 fData = NULL;
135 #endif 135 #endif
136 fReserve = fCount = 0; 136 fReserve = fCount = 0;
137 } else { 137 } else {
138 SkASSERT(fReserve == 0 && fCount == 0); 138 SkASSERT(fReserve == 0 && fCount == 0);
139 } 139 }
140 } 140 }
141 141
142 void rewind() { 142 void rewind() {
143 // same as setCount(0) 143 // same as setCount(0)
144 fCount = 0; 144 fCount = 0;
145 } 145 }
146 146
147 void setCount(size_t count) { 147 void setCount(int count) {
148 if (count > fReserve) { 148 if (count > fReserve) {
149 this->growBy(count - fCount); 149 this->growBy(count - fCount);
150 } else { 150 } else {
151 fCount = count; 151 fCount = count;
152 } 152 }
153 } 153 }
154 154
155 void setReserve(size_t reserve) { 155 void setReserve(int reserve) {
156 if (reserve > fReserve) { 156 if (reserve > fReserve) {
157 SkASSERT(reserve > fCount); 157 SkASSERT(reserve > fCount);
158 size_t count = fCount; 158 int count = fCount;
159 this->growBy(reserve - fCount); 159 this->growBy(reserve - fCount);
160 fCount = count; 160 fCount = count;
161 } 161 }
162 } 162 }
163 163
164 T* prepend() { 164 T* prepend() {
165 this->growBy(1); 165 this->growBy(1);
166 memmove(fArray + 1, fArray, (fCount - 1) * sizeof(T)); 166 memmove(fArray + 1, fArray, (fCount - 1) * sizeof(T));
167 return fArray; 167 return fArray;
168 } 168 }
169 169
170 T* append() { 170 T* append() {
171 return this->append(1, NULL); 171 return this->append(1, NULL);
172 } 172 }
173 T* append(size_t count, const T* src = NULL) { 173 T* append(int count, const T* src = NULL) {
174 size_t oldCount = fCount; 174 int oldCount = fCount;
175 if (count) { 175 if (count) {
176 SkASSERT(src == NULL || fArray == NULL || 176 SkASSERT(src == NULL || fArray == NULL ||
177 src + count <= fArray || fArray + oldCount <= src); 177 src + count <= fArray || fArray + oldCount <= src);
178 178
179 this->growBy(count); 179 this->growBy(count);
180 if (src) { 180 if (src) {
181 memcpy(fArray + oldCount, src, sizeof(T) * count); 181 memcpy(fArray + oldCount, src, sizeof(T) * count);
182 } 182 }
183 } 183 }
184 return fArray + oldCount; 184 return fArray + oldCount;
185 } 185 }
186 186
187 T* appendClear() { 187 T* appendClear() {
188 T* result = this->append(); 188 T* result = this->append();
189 *result = 0; 189 *result = 0;
190 return result; 190 return result;
191 } 191 }
192 192
193 T* insert(size_t index) { 193 T* insert(int index) {
194 return this->insert(index, 1, NULL); 194 return this->insert(index, 1, NULL);
195 } 195 }
196 T* insert(size_t index, size_t count, const T* src = NULL) { 196 T* insert(int index, int count, const T* src = NULL) {
197 SkASSERT(count); 197 SkASSERT(count);
198 SkASSERT(index <= fCount); 198 SkASSERT(index <= fCount);
199 size_t oldCount = fCount; 199 size_t oldCount = fCount;
200 this->growBy(count); 200 this->growBy(count);
201 T* dst = fArray + index; 201 T* dst = fArray + index;
202 memmove(dst + count, dst, sizeof(T) * (oldCount - index)); 202 memmove(dst + count, dst, sizeof(T) * (oldCount - index));
203 if (src) { 203 if (src) {
204 memcpy(dst, src, sizeof(T) * count); 204 memcpy(dst, src, sizeof(T) * count);
205 } 205 }
206 return dst; 206 return dst;
207 } 207 }
208 208
209 void remove(size_t index, size_t count = 1) { 209 void remove(int index, int count = 1) {
210 SkASSERT(index + count <= fCount); 210 SkASSERT(index + count <= fCount);
211 fCount = fCount - count; 211 fCount = fCount - count;
212 memmove(fArray + index, fArray + index + count, sizeof(T) * (fCount - in dex)); 212 memmove(fArray + index, fArray + index + count, sizeof(T) * (fCount - in dex));
213 } 213 }
214 214
215 void removeShuffle(size_t index) { 215 void removeShuffle(int index) {
216 SkASSERT(index < fCount); 216 SkASSERT(index < fCount);
217 size_t newCount = fCount - 1; 217 int newCount = fCount - 1;
218 fCount = newCount; 218 fCount = newCount;
219 if (index != newCount) { 219 if (index != newCount) {
220 memcpy(fArray + index, fArray + newCount, sizeof(T)); 220 memcpy(fArray + index, fArray + newCount, sizeof(T));
221 } 221 }
222 } 222 }
223 223
224 int find(const T& elem) const { 224 int find(const T& elem) const {
225 const T* iter = fArray; 225 const T* iter = fArray;
226 const T* stop = fArray + fCount; 226 const T* stop = fArray + fCount;
227 227
(...skipping 21 matching lines...) Expand all
249 * Returns true iff the array contains this element. 249 * Returns true iff the array contains this element.
250 */ 250 */
251 bool contains(const T& elem) const { 251 bool contains(const T& elem) const {
252 return (this->find(elem) >= 0); 252 return (this->find(elem) >= 0);
253 } 253 }
254 254
255 /** 255 /**
256 * Copies up to max elements into dst. The number of items copied is 256 * Copies up to max elements into dst. The number of items copied is
257 * capped by count - index. The actual number copied is returned. 257 * capped by count - index. The actual number copied is returned.
258 */ 258 */
259 int copyRange(T* dst, size_t index, int max) const { 259 int copyRange(T* dst, int index, int max) const {
260 SkASSERT(max >= 0); 260 SkASSERT(max >= 0);
261 SkASSERT(!max || dst); 261 SkASSERT(!max || dst);
262 if (index >= fCount) { 262 if (index >= fCount) {
263 return 0; 263 return 0;
264 } 264 }
265 int count = SkMin32(max, fCount - index); 265 int count = SkMin32(max, fCount - index);
266 memcpy(dst, fArray + index, sizeof(T) * count); 266 memcpy(dst, fArray + index, sizeof(T) * count);
267 return count; 267 return count;
268 } 268 }
269 269
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 339
340 private: 340 private:
341 #ifdef SK_DEBUG 341 #ifdef SK_DEBUG
342 enum { 342 enum {
343 kDebugArraySize = 16 343 kDebugArraySize = 16
344 }; 344 };
345 typedef T ArrayT[kDebugArraySize]; 345 typedef T ArrayT[kDebugArraySize];
346 ArrayT* fData; 346 ArrayT* fData;
347 #endif 347 #endif
348 T* fArray; 348 T* fArray;
349 size_t fReserve, fCount; 349 int fReserve;
350 int fCount;
350 351
351 void growBy(size_t extra) { 352 void growBy(int extra) {
352 SkASSERT(extra); 353 SkASSERT(extra);
353 354
354 if (fCount + extra > fReserve) { 355 if (fCount + extra > fReserve) {
355 size_t size = fCount + extra + 4; 356 int size = fCount + extra + 4;
356 size += size >> 2; 357 size += size >> 2;
357 358
358 fArray = (T*)sk_realloc_throw(fArray, size * sizeof(T)); 359 fArray = (T*)sk_realloc_throw(fArray, size * sizeof(T));
359 #ifdef SK_DEBUG 360 #ifdef SK_DEBUG
360 fData = (ArrayT*)fArray; 361 fData = (ArrayT*)fArray;
361 #endif 362 #endif
362 fReserve = size; 363 fReserve = size;
363 } 364 }
364 fCount += extra; 365 fCount += extra;
365 } 366 }
366 }; 367 };
367 368
368 #endif 369 #endif
OLDNEW
« no previous file with comments | « gm/texteffects.cpp ('k') | src/gpu/gl/GrGLBufferImpl.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698