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

Side by Side Diff: src/pdf/SkPDFTypes.h

Issue 1775043002: SkPDF: Add sk_sp setters; .release() becomes std::move() (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix -Wpessimizing-move Created 4 years, 9 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 | « src/pdf/SkPDFShader.cpp ('k') | src/pdf/SkPDFTypes.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 * Copyright 2010 The Android Open Source Project 2 * Copyright 2010 The Android Open Source Project
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 8
9 #ifndef SkPDFTypes_DEFINED 9 #ifndef SkPDFTypes_DEFINED
10 #define SkPDFTypes_DEFINED 10 #define SkPDFTypes_DEFINED
(...skipping 21 matching lines...) Expand all
32 which are common in the PDF format. 32 which are common in the PDF format.
33 33
34 */ 34 */
35 class SkPDFObject : public SkRefCnt { 35 class SkPDFObject : public SkRefCnt {
36 public: 36 public:
37 /** Subclasses must implement this method to print the object to the 37 /** Subclasses must implement this method to print the object to the
38 * PDF file. 38 * PDF file.
39 * @param catalog The object catalog to use. 39 * @param catalog The object catalog to use.
40 * @param stream The writable output stream to send the output to. 40 * @param stream The writable output stream to send the output to.
41 */ 41 */
42 // TODO(halcanary): make this method const
43 virtual void emitObject(SkWStream* stream, 42 virtual void emitObject(SkWStream* stream,
44 const SkPDFObjNumMap& objNumMap, 43 const SkPDFObjNumMap& objNumMap,
45 const SkPDFSubstituteMap& substitutes) const = 0; 44 const SkPDFSubstituteMap& substitutes) const = 0;
46 45
47 /** 46 /**
48 * Adds all transitive dependencies of this object to the 47 * Adds all transitive dependencies of this object to the
49 * catalog. Implementations should respect the catalog's object 48 * catalog. Implementations should respect the catalog's object
50 * substitution map. 49 * substitution map.
51 */ 50 */
52 virtual void addResources(SkPDFObjNumMap* catalog, 51 virtual void addResources(SkPDFObjNumMap* catalog,
53 const SkPDFSubstituteMap& substitutes) const {} 52 const SkPDFSubstituteMap& substitutes) const {}
54 53
55 private: 54 private:
56 typedef SkRefCnt INHERITED; 55 typedef SkRefCnt INHERITED;
57 }; 56 };
58 57
59 //////////////////////////////////////////////////////////////////////////////// 58 ////////////////////////////////////////////////////////////////////////////////
60 59
61 /** 60 /**
62 A SkPDFUnion is a non-virtualized implementation of the 61 A SkPDFUnion is a non-virtualized implementation of the
63 non-compound, non-specialized PDF Object types: Name, String, 62 non-compound, non-specialized PDF Object types: Name, String,
64 Number, Boolean. 63 Number, Boolean.
65 */ 64 */
66 class SkPDFUnion { 65 class SkPDFUnion {
67 public: 66 public:
68 // u.move() is analogous to std::move(u). It returns an rvalue.
69 SkPDFUnion move() { return static_cast<SkPDFUnion&&>(*this); }
70 // Move contstructor and assignemnt operator destroy the argument 67 // Move contstructor and assignemnt operator destroy the argument
71 // and steal their references (if needed). 68 // and steal their references (if needed).
72 SkPDFUnion(SkPDFUnion&& other); 69 SkPDFUnion(SkPDFUnion&& other);
73 SkPDFUnion& operator=(SkPDFUnion&& other); 70 SkPDFUnion& operator=(SkPDFUnion&& other);
74 71
75 ~SkPDFUnion(); 72 ~SkPDFUnion();
76 73
77 /** The following nine functions are the standard way of creating 74 /** The following nine functions are the standard way of creating
78 SkPDFUnion objects. */ 75 SkPDFUnion objects. */
79 76
80 static SkPDFUnion Int(int32_t); 77 static SkPDFUnion Int(int32_t);
81 78
82 static SkPDFUnion Int(size_t v) { return SkPDFUnion::Int(SkToS32(v)); } 79 static SkPDFUnion Int(size_t v) { return SkPDFUnion::Int(SkToS32(v)); }
83 80
84 static SkPDFUnion Bool(bool); 81 static SkPDFUnion Bool(bool);
85 82
86 static SkPDFUnion Scalar(SkScalar); 83 static SkPDFUnion Scalar(SkScalar);
87 84
88 /** These two functions do NOT take ownership of ptr, and do NOT 85 /** These two functions do NOT take ownership of char*, and do NOT
89 copy the string. Suitable for passing in static const 86 copy the string. Suitable for passing in static const
90 strings. For example: 87 strings. For example:
91 SkPDFUnion n = SkPDFUnion::Name("Length"); 88 SkPDFUnion n = SkPDFUnion::Name("Length");
92 SkPDFUnion u = SkPDFUnion::String("Identity"); */ 89 SkPDFUnion u = SkPDFUnion::String("Identity"); */
93 90
94 /** SkPDFUnion::Name(const char*) assumes that the passed string 91 /** SkPDFUnion::Name(const char*) assumes that the passed string
95 is already a valid name (that is: it has no control or 92 is already a valid name (that is: it has no control or
96 whitespace characters). This will not copy the name. */ 93 whitespace characters). This will not copy the name. */
97 static SkPDFUnion Name(const char*); 94 static SkPDFUnion Name(const char*);
98 95
99 /** SkPDFUnion::String will encode the passed string. This will 96 /** SkPDFUnion::String will encode the passed string. This will
100 not copy the name. */ 97 not copy the name. */
101 static SkPDFUnion String(const char*); 98 static SkPDFUnion String(const char*);
102 99
103 /** SkPDFUnion::Name(const SkString&) does not assume that the 100 /** SkPDFUnion::Name(const SkString&) does not assume that the
104 passed string is already a valid name and it will escape the 101 passed string is already a valid name and it will escape the
105 string. */ 102 string. */
106 static SkPDFUnion Name(const SkString&); 103 static SkPDFUnion Name(const SkString&);
107 104
108 /** SkPDFUnion::String will encode the passed string. */ 105 /** SkPDFUnion::String will encode the passed string. */
109 static SkPDFUnion String(const SkString&); 106 static SkPDFUnion String(const SkString&);
110 107
111 /** This function DOES take ownership of the object. E.g. 108 static SkPDFUnion Object(sk_sp<SkPDFObject>);
112 auto dict = sk_make_sp<SkPDFDict>(); 109 static SkPDFUnion ObjRef(sk_sp<SkPDFObject>);
113 dict->insert(.....);
114 SkPDFUnion u = SkPDFUnion::Object(dict.detach()) */
115 static SkPDFUnion Object(SkPDFObject*);
116
117 /** This function DOES take ownership of the object. E.g.
118 sk_sp<SkPDFBitmap> image(
119 SkPDFBitmap::Create(fCanon, bitmap));
120 SkPDFUnion u = SkPDFUnion::ObjRef(image.detach()) */
121 static SkPDFUnion ObjRef(SkPDFObject*);
122 110
123 /** These two non-virtual methods mirror SkPDFObject's 111 /** These two non-virtual methods mirror SkPDFObject's
124 corresponding virtuals. */ 112 corresponding virtuals. */
125 void emitObject(SkWStream*, 113 void emitObject(SkWStream*,
126 const SkPDFObjNumMap&, 114 const SkPDFObjNumMap&,
127 const SkPDFSubstituteMap&) const; 115 const SkPDFSubstituteMap&) const;
128 void addResources(SkPDFObjNumMap*, const SkPDFSubstituteMap&) const; 116 void addResources(SkPDFObjNumMap*, const SkPDFSubstituteMap&) const;
129 117
130 bool isName() const; 118 bool isName() const;
131 119
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 #if 0 // Enable if needed. 155 #if 0 // Enable if needed.
168 /** This class is a SkPDFUnion with SkPDFObject virtuals attached. 156 /** This class is a SkPDFUnion with SkPDFObject virtuals attached.
169 The only use case of this is when a non-compound PDF object is 157 The only use case of this is when a non-compound PDF object is
170 referenced indirectly. */ 158 referenced indirectly. */
171 class SkPDFAtom final : public SkPDFObject { 159 class SkPDFAtom final : public SkPDFObject {
172 public: 160 public:
173 void emitObject(SkWStream* stream, 161 void emitObject(SkWStream* stream,
174 const SkPDFObjNumMap& objNumMap, 162 const SkPDFObjNumMap& objNumMap,
175 const SkPDFSubstituteMap& substitutes) final; 163 const SkPDFSubstituteMap& substitutes) final;
176 void addResources(SkPDFObjNumMap*, const SkPDFSubstituteMap&) const final; 164 void addResources(SkPDFObjNumMap*, const SkPDFSubstituteMap&) const final;
177 SkPDFAtom(SkPDFUnion&& v) : fValue(v.move()) {} 165 SkPDFAtom(SkPDFUnion&& v) : fValue(std::move(v) {}
178 166
179 private: 167 private:
180 const SkPDFUnion fValue; 168 const SkPDFUnion fValue;
181 typedef SkPDFObject INHERITED; 169 typedef SkPDFObject INHERITED;
182 }; 170 };
183 #endif // 0 171 #endif // 0
184 172
185 //////////////////////////////////////////////////////////////////////////////// 173 ////////////////////////////////////////////////////////////////////////////////
186 174
187 /** \class SkPDFArray 175 /** \class SkPDFArray
(...skipping 28 matching lines...) Expand all
216 /** Appends a value to the end of the array. 204 /** Appends a value to the end of the array.
217 * @param value The value to add to the array. 205 * @param value The value to add to the array.
218 */ 206 */
219 void appendInt(int32_t); 207 void appendInt(int32_t);
220 void appendBool(bool); 208 void appendBool(bool);
221 void appendScalar(SkScalar); 209 void appendScalar(SkScalar);
222 void appendName(const char[]); 210 void appendName(const char[]);
223 void appendName(const SkString&); 211 void appendName(const SkString&);
224 void appendString(const char[]); 212 void appendString(const char[]);
225 void appendString(const SkString&); 213 void appendString(const SkString&);
226 /** appendObject and appendObjRef take ownership of the passed object */ 214 void appendObject(sk_sp<SkPDFObject>);
227 void appendObject(SkPDFObject*); 215 void appendObjRef(sk_sp<SkPDFObject>);
228 void appendObjRef(SkPDFObject*);
229 216
230 private: 217 private:
231 SkTDArray<SkPDFUnion> fValues; 218 SkTDArray<SkPDFUnion> fValues;
232 void append(SkPDFUnion&& value); 219 void append(SkPDFUnion&& value);
233 typedef SkPDFObject INHERITED; 220 typedef SkPDFObject INHERITED;
234 }; 221 };
235 222
236 /** \class SkPDFDict 223 /** \class SkPDFDict
237 224
238 A dictionary object in a PDF. 225 A dictionary object in a PDF.
(...skipping 15 matching lines...) Expand all
254 void emitObject(SkWStream* stream, 241 void emitObject(SkWStream* stream,
255 const SkPDFObjNumMap& objNumMap, 242 const SkPDFObjNumMap& objNumMap,
256 const SkPDFSubstituteMap& substitutes) const override; 243 const SkPDFSubstituteMap& substitutes) const override;
257 void addResources(SkPDFObjNumMap*, 244 void addResources(SkPDFObjNumMap*,
258 const SkPDFSubstituteMap&) const override; 245 const SkPDFSubstituteMap&) const override;
259 246
260 /** The size of the dictionary. 247 /** The size of the dictionary.
261 */ 248 */
262 int size() const; 249 int size() const;
263 250
264 /** Add the value to the dictionary with the given key. Takes 251 /** Add the value to the dictionary with the given key.
265 * ownership of the object.
266 * @param key The text of the key for this dictionary entry. 252 * @param key The text of the key for this dictionary entry.
267 * @param value The value for this dictionary entry. 253 * @param value The value for this dictionary entry.
268 */ 254 */
269 void insertObject(const char key[], SkPDFObject* value); 255 void insertObject(const char key[], sk_sp<SkPDFObject>);
270 void insertObject(const SkString& key, SkPDFObject* value); 256 void insertObject(const SkString& key, sk_sp<SkPDFObject>);
271 void insertObjRef(const char key[], SkPDFObject* value); 257 void insertObjRef(const char key[], sk_sp<SkPDFObject>);
272 void insertObjRef(const SkString& key, SkPDFObject* value); 258 void insertObjRef(const SkString& key, sk_sp<SkPDFObject>);
273 259
274 /** Add the value to the dictionary with the given key. 260 /** Add the value to the dictionary with the given key.
275 * @param key The text of the key for this dictionary entry. 261 * @param key The text of the key for this dictionary entry.
276 * @param value The value for this dictionary entry. 262 * @param value The value for this dictionary entry.
277 */ 263 */
278 void insertBool(const char key[], bool value); 264 void insertBool(const char key[], bool value);
279 void insertInt(const char key[], int32_t value); 265 void insertInt(const char key[], int32_t value);
280 void insertInt(const char key[], size_t value); 266 void insertInt(const char key[], size_t value);
281 void insertScalar(const char key[], SkScalar value); 267 void insertScalar(const char key[], SkScalar value);
282 void insertName(const char key[], const char nameValue[]); 268 void insertName(const char key[], const char nameValue[]);
(...skipping 27 matching lines...) Expand all
310 /** \class SkPDFSharedStream 296 /** \class SkPDFSharedStream
311 297
312 This class takes an asset and assumes that it is backed by 298 This class takes an asset and assumes that it is backed by
313 long-lived shared data (for example, an open file 299 long-lived shared data (for example, an open file
314 descriptor). That is: no memory savings can be made by holding on 300 descriptor). That is: no memory savings can be made by holding on
315 to a compressed version instead. 301 to a compressed version instead.
316 */ 302 */
317 class SkPDFSharedStream final : public SkPDFObject { 303 class SkPDFSharedStream final : public SkPDFObject {
318 public: 304 public:
319 // Takes ownership of asset. 305 // Takes ownership of asset.
320 SkPDFSharedStream(SkStreamAsset* data) : fAsset(data), fDict(new SkPDFDict) { SkASSERT(data); } 306 SkPDFSharedStream(SkStreamAsset* data)
307 : fAsset(data), fDict(new SkPDFDict) { SkASSERT(data); }
321 SkPDFDict* dict() { return fDict.get(); } 308 SkPDFDict* dict() { return fDict.get(); }
322 void emitObject(SkWStream*, 309 void emitObject(SkWStream*,
323 const SkPDFObjNumMap&, 310 const SkPDFObjNumMap&,
324 const SkPDFSubstituteMap&) const override; 311 const SkPDFSubstituteMap&) const override;
325 void addResources(SkPDFObjNumMap*, 312 void addResources(SkPDFObjNumMap*,
326 const SkPDFSubstituteMap&) const override; 313 const SkPDFSubstituteMap&) const override;
327 314
328 private: 315 private:
329 SkAutoTDelete<SkStreamAsset> fAsset; 316 SkAutoTDelete<SkStreamAsset> fAsset;
330 sk_sp<SkPDFDict> fDict; 317 sk_sp<SkPDFDict> fDict;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 }; 380 };
394 381
395 #ifdef SK_PDF_IMAGE_STATS 382 #ifdef SK_PDF_IMAGE_STATS
396 extern SkAtomic<int> gDrawImageCalls; 383 extern SkAtomic<int> gDrawImageCalls;
397 extern SkAtomic<int> gJpegImageObjects; 384 extern SkAtomic<int> gJpegImageObjects;
398 extern SkAtomic<int> gRegularImageObjects; 385 extern SkAtomic<int> gRegularImageObjects;
399 extern void SkPDFImageDumpStats(); 386 extern void SkPDFImageDumpStats();
400 #endif // SK_PDF_IMAGE_STATS 387 #endif // SK_PDF_IMAGE_STATS
401 388
402 #endif 389 #endif
OLDNEW
« no previous file with comments | « src/pdf/SkPDFShader.cpp ('k') | src/pdf/SkPDFTypes.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698