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

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

Issue 163983002: SkWriter32: throw in the SkTDArray towel. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Clean up scars in SkTDArray. 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 | « include/core/SkTDArray.h ('k') | 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 2008 The Android Open Source Project 3 * Copyright 2008 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 SkWriter32_DEFINED 10 #ifndef SkWriter32_DEFINED
11 #define SkWriter32_DEFINED 11 #define SkWriter32_DEFINED
12 12
13 #include "SkMatrix.h" 13 #include "SkMatrix.h"
14 #include "SkPath.h" 14 #include "SkPath.h"
15 #include "SkPoint.h" 15 #include "SkPoint.h"
16 #include "SkRRect.h" 16 #include "SkRRect.h"
17 #include "SkRect.h" 17 #include "SkRect.h"
18 #include "SkRegion.h" 18 #include "SkRegion.h"
19 #include "SkScalar.h" 19 #include "SkScalar.h"
20 #include "SkStream.h" 20 #include "SkStream.h"
21 #include "SkTDArray.h" 21 #include "SkTemplates.h"
22 #include "SkTypes.h" 22 #include "SkTypes.h"
23 23
24 class SkWriter32 : SkNoncopyable { 24 class SkWriter32 : SkNoncopyable {
25 public: 25 public:
26 /** 26 /**
27 * The caller can specify an initial block of storage, which the caller man ages. 27 * The caller can specify an initial block of storage, which the caller man ages.
28 * 28 *
29 * SkWriter32 will try to back reserve and write calls with this external s torage until the 29 * SkWriter32 will try to back reserve and write calls with this external s torage until the
30 * first time an allocation doesn't fit. From then it will use dynamically allocated storage. 30 * first time an allocation doesn't fit. From then it will use dynamically allocated storage.
31 * This used to be optional behavior, but pipe now relies on it. 31 * This used to be optional behavior, but pipe now relies on it.
32 */ 32 */
33 SkWriter32(void* external = NULL, size_t externalBytes = 0) 33 SkWriter32(void* external = NULL, size_t externalBytes = 0) {
34 : fData(0)
35 , fCapacity(0)
36 , fUsed(0)
37 , fExternal(0)
38 {
39 this->reset(external, externalBytes); 34 this->reset(external, externalBytes);
40 } 35 }
41 36
42 // return the current offset (will always be a multiple of 4) 37 // return the current offset (will always be a multiple of 4)
43 size_t bytesWritten() const { return fUsed; } 38 size_t bytesWritten() const { return fUsed; }
44 39
45 SK_ATTR_DEPRECATED("use bytesWritten") 40 SK_ATTR_DEPRECATED("use bytesWritten")
46 size_t size() const { return this->bytesWritten(); } 41 size_t size() const { return this->bytesWritten(); }
47 42
48 void reset(void* external = NULL, size_t externalBytes = 0) { 43 void reset(void* external = NULL, size_t externalBytes = 0) {
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 226
232 // read from the stream, and write up to length bytes. Return the actual 227 // read from the stream, and write up to length bytes. Return the actual
233 // number of bytes written. 228 // number of bytes written.
234 size_t readFromStream(SkStream* stream, size_t length) { 229 size_t readFromStream(SkStream* stream, size_t length) {
235 return stream->read(this->reservePad(length), length); 230 return stream->read(this->reservePad(length), length);
236 } 231 }
237 232
238 private: 233 private:
239 void growToAtLeast(size_t size); 234 void growToAtLeast(size_t size);
240 235
241 uint8_t* fData; // Points to either fInternal or fExternal. 236 uint8_t* fData; // Points to either fInternal or fExterna l.
242 size_t fCapacity; // Number of bytes we can write to fData. 237 size_t fCapacity; // Number of bytes we can write to fData.
243 size_t fUsed; // Number of bytes written. 238 size_t fUsed; // Number of bytes written.
244 void* fExternal; // Unmanaged memory block. 239 void* fExternal; // Unmanaged memory block.
245 SkTDArray<uint8_t> fInternal; // Managed memory block. 240 SkAutoTMalloc<uint8_t> fInternal; // Managed memory block.
246 }; 241 };
247 242
248 /** 243 /**
249 * Helper class to allocated SIZE bytes as part of the writer, and to provide 244 * Helper class to allocated SIZE bytes as part of the writer, and to provide
250 * that storage to the constructor as its initial storage buffer. 245 * that storage to the constructor as its initial storage buffer.
251 * 246 *
252 * This wrapper ensures proper alignment rules are met for the storage. 247 * This wrapper ensures proper alignment rules are met for the storage.
253 */ 248 */
254 template <size_t SIZE> class SkSWriter32 : public SkWriter32 { 249 template <size_t SIZE> class SkSWriter32 : public SkWriter32 {
255 public: 250 public:
256 SkSWriter32() { this->reset(); } 251 SkSWriter32() { this->reset(); }
257 252
258 void reset() {this->INHERITED::reset(fData.fStorage, SIZE); } 253 void reset() {this->INHERITED::reset(fData.fStorage, SIZE); }
259 254
260 private: 255 private:
261 union { 256 union {
262 void* fPtrAlignment; 257 void* fPtrAlignment;
263 double fDoubleAlignment; 258 double fDoubleAlignment;
264 char fStorage[SIZE]; 259 char fStorage[SIZE];
265 } fData; 260 } fData;
266 261
267 typedef SkWriter32 INHERITED; 262 typedef SkWriter32 INHERITED;
268 }; 263 };
269 264
270 #endif 265 #endif
OLDNEW
« no previous file with comments | « include/core/SkTDArray.h ('k') | src/core/SkWriter32.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698