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

Side by Side Diff: core/fpdfapi/fpdf_font/ttgsubtable.h

Issue 2119013002: Change class member variables in raw pointer type into unique_ptr (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: fix test Created 4 years, 5 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
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #ifndef CORE_FPDFAPI_FPDF_FONT_TTGSUBTABLE_H_ 7 #ifndef CORE_FPDFAPI_FPDF_FONT_TTGSUBTABLE_H_
8 #define CORE_FPDFAPI_FPDF_FONT_TTGSUBTABLE_H_ 8 #define CORE_FPDFAPI_FPDF_FONT_TTGSUBTABLE_H_
9 9
10 #include <stdint.h> 10 #include <stdint.h>
11 11
12 #include <map> 12 #include <map>
13 #include <memory>
13 14
14 #include "core/fxcrt/include/fx_basic.h" 15 #include "core/fxcrt/include/fx_basic.h"
15 #include "core/fxge/include/fx_font.h" 16 #include "core/fxge/include/fx_font.h"
16 #include "core/fxge/include/fx_freetype.h" 17 #include "core/fxge/include/fx_freetype.h"
17 18
18 class CFX_GlyphMap { 19 class CFX_GlyphMap {
19 public: 20 public:
20 CFX_GlyphMap(); 21 CFX_GlyphMap();
21 ~CFX_GlyphMap(); 22 ~CFX_GlyphMap();
22 23
(...skipping 15 matching lines...) Expand all
38 bool GetVerticalGlyph(uint32_t glyphnum, uint32_t* vglyphnum); 39 bool GetVerticalGlyph(uint32_t glyphnum, uint32_t* vglyphnum);
39 40
40 private: 41 private:
41 struct tt_gsub_header { 42 struct tt_gsub_header {
42 uint32_t Version; 43 uint32_t Version;
43 uint16_t ScriptList; 44 uint16_t ScriptList;
44 uint16_t FeatureList; 45 uint16_t FeatureList;
45 uint16_t LookupList; 46 uint16_t LookupList;
46 }; 47 };
47 struct TLangSys { 48 struct TLangSys {
48 TLangSys() 49 TLangSys();
49 : LookupOrder(0), 50 ~TLangSys();
50 ReqFeatureIndex(0),
51 FeatureCount(0),
52 FeatureIndex(nullptr) {}
53 ~TLangSys() { delete[] FeatureIndex; }
54 51
55 uint16_t LookupOrder; 52 uint16_t LookupOrder;
56 uint16_t ReqFeatureIndex; 53 uint16_t ReqFeatureIndex;
57 uint16_t FeatureCount; 54 uint16_t FeatureCount;
58 uint16_t* FeatureIndex; 55 std::unique_ptr<uint16_t[]> FeatureIndex;
59 56
60 private: 57 private:
61 TLangSys(const TLangSys&); 58 TLangSys(const TLangSys&);
62 TLangSys& operator=(const TLangSys&); 59 TLangSys& operator=(const TLangSys&);
63 }; 60 };
64 struct TLangSysRecord { 61 struct TLangSysRecord {
65 TLangSysRecord() : LangSysTag(0) {} 62 TLangSysRecord() : LangSysTag(0) {}
66 63
67 uint32_t LangSysTag; 64 uint32_t LangSysTag;
68 struct TLangSys LangSys; 65 TLangSys LangSys;
69 66
70 private: 67 private:
71 TLangSysRecord(const TLangSysRecord&); 68 TLangSysRecord(const TLangSysRecord&);
72 TLangSysRecord& operator=(const TLangSysRecord&); 69 TLangSysRecord& operator=(const TLangSysRecord&);
73 }; 70 };
74 struct TScript { 71 struct TScript {
75 TScript() : DefaultLangSys(0), LangSysCount(0), LangSysRecord(nullptr) {} 72 TScript();
76 ~TScript() { delete[] LangSysRecord; } 73 ~TScript();
77 74
78 uint16_t DefaultLangSys; 75 uint16_t DefaultLangSys;
79 uint16_t LangSysCount; 76 uint16_t LangSysCount;
80 // TODO(weili): Replace with a smart pointer type, pdfium:518. 77 std::unique_ptr<TLangSysRecord[]> LangSysRecord;
81 struct TLangSysRecord* LangSysRecord;
82 78
83 private: 79 private:
84 TScript(const TScript&); 80 TScript(const TScript&);
85 TScript& operator=(const TScript&); 81 TScript& operator=(const TScript&);
86 }; 82 };
87 struct TScriptRecord { 83 struct TScriptRecord {
88 TScriptRecord() : ScriptTag(0) {} 84 TScriptRecord() : ScriptTag(0) {}
89 85
90 uint32_t ScriptTag; 86 uint32_t ScriptTag;
91 struct TScript Script; 87 TScript Script;
92 88
93 private: 89 private:
94 TScriptRecord(const TScriptRecord&); 90 TScriptRecord(const TScriptRecord&);
95 TScriptRecord& operator=(const TScriptRecord&); 91 TScriptRecord& operator=(const TScriptRecord&);
96 }; 92 };
97 struct TScriptList { 93 struct TScriptList {
98 TScriptList() : ScriptCount(0), ScriptRecord(nullptr) {} 94 TScriptList();
99 ~TScriptList() { delete[] ScriptRecord; } 95 ~TScriptList();
100 96
101 uint16_t ScriptCount; 97 uint16_t ScriptCount;
102 struct TScriptRecord* ScriptRecord; 98 std::unique_ptr<TScriptRecord[]> ScriptRecord;
103 99
104 private: 100 private:
105 TScriptList(const TScriptList&); 101 TScriptList(const TScriptList&);
106 TScriptList& operator=(const TScriptList&); 102 TScriptList& operator=(const TScriptList&);
107 }; 103 };
108 struct TFeature { 104 struct TFeature {
109 TFeature() : FeatureParams(0), LookupCount(0), LookupListIndex(nullptr) {} 105 TFeature();
110 ~TFeature() { delete[] LookupListIndex; } 106 ~TFeature();
111 107
112 uint16_t FeatureParams; 108 uint16_t FeatureParams;
113 int LookupCount; 109 int LookupCount;
114 uint16_t* LookupListIndex; 110 std::unique_ptr<uint16_t[]> LookupListIndex;
115 111
116 private: 112 private:
117 TFeature(const TFeature&); 113 TFeature(const TFeature&);
118 TFeature& operator=(const TFeature&); 114 TFeature& operator=(const TFeature&);
119 }; 115 };
120 struct TFeatureRecord { 116 struct TFeatureRecord {
121 TFeatureRecord() : FeatureTag(0) {} 117 TFeatureRecord() : FeatureTag(0) {}
122 118
123 uint32_t FeatureTag; 119 uint32_t FeatureTag;
124 struct TFeature Feature; 120 TFeature Feature;
125 121
126 private: 122 private:
127 TFeatureRecord(const TFeatureRecord&); 123 TFeatureRecord(const TFeatureRecord&);
128 TFeatureRecord& operator=(const TFeatureRecord&); 124 TFeatureRecord& operator=(const TFeatureRecord&);
129 }; 125 };
130 struct TFeatureList { 126 struct TFeatureList {
131 TFeatureList() : FeatureCount(0), FeatureRecord(nullptr) {} 127 TFeatureList();
132 ~TFeatureList() { delete[] FeatureRecord; } 128 ~TFeatureList();
133 129
134 int FeatureCount; 130 int FeatureCount;
135 struct TFeatureRecord* FeatureRecord; 131 std::unique_ptr<TFeatureRecord[]> FeatureRecord;
136 132
137 private: 133 private:
138 TFeatureList(const TFeatureList&); 134 TFeatureList(const TFeatureList&);
139 TFeatureList& operator=(const TFeatureList&); 135 TFeatureList& operator=(const TFeatureList&);
140 }; 136 };
141 enum TLookupFlag { 137 enum TLookupFlag {
142 LOOKUPFLAG_RightToLeft = 0x0001, 138 LOOKUPFLAG_RightToLeft = 0x0001,
143 LOOKUPFLAG_IgnoreBaseGlyphs = 0x0002, 139 LOOKUPFLAG_IgnoreBaseGlyphs = 0x0002,
144 LOOKUPFLAG_IgnoreLigatures = 0x0004, 140 LOOKUPFLAG_IgnoreLigatures = 0x0004,
145 LOOKUPFLAG_IgnoreMarks = 0x0008, 141 LOOKUPFLAG_IgnoreMarks = 0x0008,
146 LOOKUPFLAG_Reserved = 0x00F0, 142 LOOKUPFLAG_Reserved = 0x00F0,
147 LOOKUPFLAG_MarkAttachmentType = 0xFF00, 143 LOOKUPFLAG_MarkAttachmentType = 0xFF00,
148 }; 144 };
149 struct TCoverageFormatBase { 145 struct TCoverageFormatBase {
150 TCoverageFormatBase() : CoverageFormat(0) {} 146 TCoverageFormatBase() : CoverageFormat(0) {}
147 explicit TCoverageFormatBase(uint16_t format) : CoverageFormat(format) {}
151 virtual ~TCoverageFormatBase() {} 148 virtual ~TCoverageFormatBase() {}
152 149
153 uint16_t CoverageFormat; 150 uint16_t CoverageFormat;
154 CFX_GlyphMap m_glyphMap; 151 CFX_GlyphMap m_glyphMap;
155 152
156 private: 153 private:
157 TCoverageFormatBase(const TCoverageFormatBase&); 154 TCoverageFormatBase(const TCoverageFormatBase&);
158 TCoverageFormatBase& operator=(const TCoverageFormatBase&); 155 TCoverageFormatBase& operator=(const TCoverageFormatBase&);
159 }; 156 };
160 struct TCoverageFormat1 : public TCoverageFormatBase { 157 struct TCoverageFormat1 : public TCoverageFormatBase {
161 TCoverageFormat1(); 158 TCoverageFormat1();
162 ~TCoverageFormat1() override; 159 ~TCoverageFormat1() override;
163 160
164 uint16_t GlyphCount; 161 uint16_t GlyphCount;
165 uint16_t* GlyphArray; 162 std::unique_ptr<uint16_t[]> GlyphArray;
166 163
167 private: 164 private:
168 TCoverageFormat1(const TCoverageFormat1&); 165 TCoverageFormat1(const TCoverageFormat1&);
169 TCoverageFormat1& operator=(const TCoverageFormat1&); 166 TCoverageFormat1& operator=(const TCoverageFormat1&);
170 }; 167 };
171 struct TRangeRecord { 168 struct TRangeRecord {
172 TRangeRecord(); 169 TRangeRecord();
173 170
174 friend bool operator>(const TRangeRecord& r1, const TRangeRecord& r2) { 171 friend bool operator>(const TRangeRecord& r1, const TRangeRecord& r2) {
175 return r1.Start > r2.Start; 172 return r1.Start > r2.Start;
176 } 173 }
177 174
178 uint16_t Start; 175 uint16_t Start;
179 uint16_t End; 176 uint16_t End;
180 uint16_t StartCoverageIndex; 177 uint16_t StartCoverageIndex;
181 178
182 private: 179 private:
183 TRangeRecord(const TRangeRecord&); 180 TRangeRecord(const TRangeRecord&);
184 }; 181 };
185 struct TCoverageFormat2 : public TCoverageFormatBase { 182 struct TCoverageFormat2 : public TCoverageFormatBase {
186 TCoverageFormat2(); 183 TCoverageFormat2();
187 ~TCoverageFormat2() override; 184 ~TCoverageFormat2() override;
188 185
189 uint16_t RangeCount; 186 uint16_t RangeCount;
190 struct TRangeRecord* RangeRecord; 187 std::unique_ptr<TRangeRecord[]> RangeRecord;
191 188
192 private: 189 private:
193 TCoverageFormat2(const TCoverageFormat2&); 190 TCoverageFormat2(const TCoverageFormat2&);
194 TCoverageFormat2& operator=(const TCoverageFormat2&); 191 TCoverageFormat2& operator=(const TCoverageFormat2&);
195 }; 192 };
196 struct TClassDefFormatBase {
197 TClassDefFormatBase() : ClassFormat(0) {}
198 virtual ~TClassDefFormatBase() {}
199
200 uint16_t ClassFormat;
201
202 private:
203 TClassDefFormatBase(const TClassDefFormatBase&);
204 TClassDefFormatBase& operator=(const TClassDefFormatBase&);
205 };
206 struct TClassDefFormat1 : public TClassDefFormatBase {
207 TClassDefFormat1();
208 ~TClassDefFormat1() override;
209
210 uint16_t StartGlyph;
211 uint16_t GlyphCount;
212 uint16_t* ClassValueArray;
213
214 private:
215 TClassDefFormat1(const TClassDefFormat1&);
216 TClassDefFormat1& operator=(const TClassDefFormat1&);
217 };
218 struct TClassRangeRecord {
219 TClassRangeRecord() : Start(0), End(0), Class(0) {}
220
221 uint16_t Start;
222 uint16_t End;
223 uint16_t Class;
224
225 private:
226 TClassRangeRecord(const TClassRangeRecord&);
227 TClassRangeRecord& operator=(const TClassRangeRecord&);
228 };
229 struct TClassDefFormat2 : public TClassDefFormatBase {
230 TClassDefFormat2();
231 ~TClassDefFormat2() override;
232
233 uint16_t ClassRangeCount;
234 struct TClassRangeRecord* ClassRangeRecord;
235
236 private:
237 TClassDefFormat2(const TClassDefFormat2&);
238 TClassDefFormat2& operator=(const TClassDefFormat2&);
239 };
240 struct TDevice { 193 struct TDevice {
241 TDevice() : StartSize(0), EndSize(0), DeltaFormat(0) {} 194 TDevice() : StartSize(0), EndSize(0), DeltaFormat(0) {}
242 195
243 uint16_t StartSize; 196 uint16_t StartSize;
244 uint16_t EndSize; 197 uint16_t EndSize;
245 uint16_t DeltaFormat; 198 uint16_t DeltaFormat;
246 199
247 private: 200 private:
248 TDevice(const TDevice&); 201 TDevice(const TDevice&);
249 TDevice& operator=(const TDevice&); 202 TDevice& operator=(const TDevice&);
250 }; 203 };
251 struct TSubTableBase { 204 struct TSubTableBase {
252 TSubTableBase() : SubstFormat(0) {} 205 TSubTableBase() : SubstFormat(0) {}
206 explicit TSubTableBase(uint16_t format) : SubstFormat(format) {}
253 virtual ~TSubTableBase() {} 207 virtual ~TSubTableBase() {}
Lei Zhang 2016/07/06 23:19:56 BTW, does this need to be virtual? There are subcl
Wei Li 2016/07/07 00:03:35 yes since the destructors of subclasses are virtua
254 208
255 uint16_t SubstFormat; 209 uint16_t SubstFormat;
256 210
257 private: 211 private:
258 TSubTableBase(const TSubTableBase&); 212 TSubTableBase(const TSubTableBase&);
259 TSubTableBase& operator=(const TSubTableBase&); 213 TSubTableBase& operator=(const TSubTableBase&);
260 }; 214 };
261 struct TSingleSubstFormat1 : public TSubTableBase { 215 struct TSingleSubstFormat1 : public TSubTableBase {
262 TSingleSubstFormat1(); 216 TSingleSubstFormat1();
263 ~TSingleSubstFormat1() override; 217 ~TSingleSubstFormat1() override;
264 218
265 TCoverageFormatBase* Coverage; 219 std::unique_ptr<TCoverageFormatBase> Coverage;
266 int16_t DeltaGlyphID; 220 int16_t DeltaGlyphID;
267 221
268 private: 222 private:
269 TSingleSubstFormat1(const TSingleSubstFormat1&); 223 TSingleSubstFormat1(const TSingleSubstFormat1&);
270 TSingleSubstFormat1& operator=(const TSingleSubstFormat1&); 224 TSingleSubstFormat1& operator=(const TSingleSubstFormat1&);
271 }; 225 };
272 struct TSingleSubstFormat2 : public TSubTableBase { 226 struct TSingleSubstFormat2 : public TSubTableBase {
273 TSingleSubstFormat2(); 227 TSingleSubstFormat2();
274 ~TSingleSubstFormat2() override; 228 ~TSingleSubstFormat2() override;
275 229
276 TCoverageFormatBase* Coverage; 230 std::unique_ptr<TCoverageFormatBase> Coverage;
277 uint16_t GlyphCount; 231 uint16_t GlyphCount;
278 uint16_t* Substitute; 232 std::unique_ptr<uint16_t[]> Substitute;
279 233
280 private: 234 private:
281 TSingleSubstFormat2(const TSingleSubstFormat2&); 235 TSingleSubstFormat2(const TSingleSubstFormat2&);
282 TSingleSubstFormat2& operator=(const TSingleSubstFormat2&); 236 TSingleSubstFormat2& operator=(const TSingleSubstFormat2&);
283 }; 237 };
284 struct TLookup { 238 struct TLookup {
285 TLookup(); 239 TLookup();
286 ~TLookup(); 240 ~TLookup();
287 241
288 uint16_t LookupType; 242 uint16_t LookupType;
289 uint16_t LookupFlag; 243 uint16_t LookupFlag;
290 uint16_t SubTableCount; 244 uint16_t SubTableCount;
291 struct TSubTableBase** SubTable; 245 std::unique_ptr<TSubTableBase* []> SubTable;
292 246
293 private: 247 private:
294 TLookup(const TLookup&); 248 TLookup(const TLookup&);
295 TLookup& operator=(const TLookup&); 249 TLookup& operator=(const TLookup&);
296 }; 250 };
297 struct TLookupList { 251 struct TLookupList {
298 TLookupList() : LookupCount(0), Lookup(nullptr) {} 252 TLookupList();
299 ~TLookupList() { delete[] Lookup; } 253 ~TLookupList();
300 254
301 int LookupCount; 255 int LookupCount;
302 struct TLookup* Lookup; 256 std::unique_ptr<TLookup[]> Lookup;
303 257
304 private: 258 private:
305 TLookupList(const TLookupList&); 259 TLookupList(const TLookupList&);
306 TLookupList& operator=(const TLookupList&); 260 TLookupList& operator=(const TLookupList&);
307 }; 261 };
308 262
309 bool Parse(FT_Bytes scriptlist, FT_Bytes featurelist, FT_Bytes lookuplist); 263 bool Parse(FT_Bytes scriptlist, FT_Bytes featurelist, FT_Bytes lookuplist);
310 void ParseScriptList(FT_Bytes raw, TScriptList* rec); 264 void ParseScriptList(FT_Bytes raw, TScriptList* rec);
311 void ParseScript(FT_Bytes raw, TScript* rec); 265 void ParseScript(FT_Bytes raw, TScript* rec);
312 void ParseLangSys(FT_Bytes raw, TLangSys* rec); 266 void ParseLangSys(FT_Bytes raw, TLangSys* rec);
313 void ParseFeatureList(FT_Bytes raw, TFeatureList* rec); 267 void ParseFeatureList(FT_Bytes raw, TFeatureList* rec);
314 void ParseFeature(FT_Bytes raw, TFeature* rec); 268 void ParseFeature(FT_Bytes raw, TFeature* rec);
315 void ParseLookupList(FT_Bytes raw, TLookupList* rec); 269 void ParseLookupList(FT_Bytes raw, TLookupList* rec);
316 void ParseLookup(FT_Bytes raw, TLookup* rec); 270 void ParseLookup(FT_Bytes raw, TLookup* rec);
317 void ParseCoverage(FT_Bytes raw, TCoverageFormatBase** rec); 271 TCoverageFormatBase* ParseCoverage(FT_Bytes raw);
318 void ParseCoverageFormat1(FT_Bytes raw, TCoverageFormat1* rec); 272 void ParseCoverageFormat1(FT_Bytes raw, TCoverageFormat1* rec);
319 void ParseCoverageFormat2(FT_Bytes raw, TCoverageFormat2* rec); 273 void ParseCoverageFormat2(FT_Bytes raw, TCoverageFormat2* rec);
320 void ParseSingleSubst(FT_Bytes raw, TSubTableBase** rec); 274 void ParseSingleSubst(FT_Bytes raw, TSubTableBase** rec);
321 void ParseSingleSubstFormat1(FT_Bytes raw, TSingleSubstFormat1* rec); 275 void ParseSingleSubstFormat1(FT_Bytes raw, TSingleSubstFormat1* rec);
322 void ParseSingleSubstFormat2(FT_Bytes raw, TSingleSubstFormat2* rec); 276 void ParseSingleSubstFormat2(FT_Bytes raw, TSingleSubstFormat2* rec);
323 277
324 bool GetVerticalGlyphSub(uint32_t glyphnum, 278 bool GetVerticalGlyphSub(uint32_t glyphnum,
325 uint32_t* vglyphnum, 279 uint32_t* vglyphnum,
326 struct TFeature* Feature) const; 280 TFeature* Feature) const;
327 bool GetVerticalGlyphSub2(uint32_t glyphnum, 281 bool GetVerticalGlyphSub2(uint32_t glyphnum,
328 uint32_t* vglyphnum, 282 uint32_t* vglyphnum,
329 struct TLookup* Lookup) const; 283 TLookup* Lookup) const;
330 int GetCoverageIndex(struct TCoverageFormatBase* Coverage, uint32_t g) const; 284 int GetCoverageIndex(TCoverageFormatBase* Coverage, uint32_t g) const;
331 285
332 uint8_t GetUInt8(FT_Bytes& p) const; 286 uint8_t GetUInt8(FT_Bytes& p) const;
333 int16_t GetInt16(FT_Bytes& p) const; 287 int16_t GetInt16(FT_Bytes& p) const;
334 uint16_t GetUInt16(FT_Bytes& p) const; 288 uint16_t GetUInt16(FT_Bytes& p) const;
335 int32_t GetInt32(FT_Bytes& p) const; 289 int32_t GetInt32(FT_Bytes& p) const;
336 uint32_t GetUInt32(FT_Bytes& p) const; 290 uint32_t GetUInt32(FT_Bytes& p) const;
337 291
338 std::map<uint32_t, uint32_t> m_featureMap; 292 std::map<uint32_t, uint32_t> m_featureMap;
339 FX_BOOL m_bFeautureMapLoad; 293 FX_BOOL m_bFeautureMapLoad;
340 bool loaded; 294 bool loaded;
341 struct tt_gsub_header header; 295 tt_gsub_header header;
342 struct TScriptList ScriptList; 296 TScriptList ScriptList;
343 struct TFeatureList FeatureList; 297 TFeatureList FeatureList;
344 struct TLookupList LookupList; 298 TLookupList LookupList;
345 }; 299 };
346 300
347 #endif // CORE_FPDFAPI_FPDF_FONT_TTGSUBTABLE_H_ 301 #endif // CORE_FPDFAPI_FPDF_FONT_TTGSUBTABLE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698