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

Side by Side Diff: include/freetype/internal/ftserv.h

Issue 23555005: Update freetype to the latest version of Android external/freetype (Closed) Base URL: https://chromium.googlesource.com/chromium/src/third_party/freetype.git@master
Patch Set: Created 7 years, 3 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/freetype/internal/ftrfork.h ('k') | include/freetype/internal/ftstream.h » ('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 /* ftserv.h */ 3 /* ftserv.h */
4 /* */ 4 /* */
5 /* The FreeType services (specification only). */ 5 /* The FreeType services (specification only). */
6 /* */ 6 /* */
7 /* Copyright 2003, 2004, 2005, 2006, 2007 by */ 7 /* Copyright 2003-2007, 2009, 2012 by */
8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */
9 /* */ 9 /* */
10 /* This file is part of the FreeType project, and may only be used, */ 10 /* This file is part of the FreeType project, and may only be used, */
11 /* modified, and distributed under the terms of the FreeType project */ 11 /* modified, and distributed under the terms of the FreeType project */
12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */
13 /* this file you indicate that you have read the license and */ 13 /* this file you indicate that you have read the license and */
14 /* understand and accept it fully. */ 14 /* understand and accept it fully. */
15 /* */ 15 /* */
16 /***************************************************************************/ 16 /***************************************************************************/
17 17
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 */ 156 */
157 typedef struct FT_ServiceDescRec_ 157 typedef struct FT_ServiceDescRec_
158 { 158 {
159 const char* serv_id; /* service name */ 159 const char* serv_id; /* service name */
160 const void* serv_data; /* service pointer/data */ 160 const void* serv_data; /* service pointer/data */
161 161
162 } FT_ServiceDescRec; 162 } FT_ServiceDescRec;
163 163
164 typedef const FT_ServiceDescRec* FT_ServiceDesc; 164 typedef const FT_ServiceDescRec* FT_ServiceDesc;
165 165
166
166 /*************************************************************************/ 167 /*************************************************************************/
167 /* */ 168 /* */
168 /* <Macro> */ 169 /* <Macro> */
169 /* FT_DEFINE_SERVICEDESCREC1 .. FT_DEFINE_SERVICEDESCREC6 */ 170 /* FT_DEFINE_SERVICEDESCREC1 .. FT_DEFINE_SERVICEDESCREC6 */
170 /* */ 171 /* */
171 /* <Description> */ 172 /* <Description> */
172 /* Used to initialize an array of FT_ServiceDescRec structs. */ 173 /* Used to initialize an array of FT_ServiceDescRec structures. */
173 /* */ 174 /* */
174 /* When FT_CONFIG_OPTION_PIC is defined a Create funtion will need */ 175 /* When FT_CONFIG_OPTION_PIC is defined a `create' function needs to */
175 /* to called with a pointer where the allocated array is returned. */ 176 /* be called with a pointer to return an allocated array. As soon as */
176 /* And when it is no longer needed a Destroy function needs */ 177 /* it is no longer needed, a `destroy' function needs to be called to */
177 /* to be called to release that allocation. */ 178 /* release that allocation. */
178 /* */ 179 /* */
179 /* These functions should be manyally called from the pic_init and */ 180 /* These functions should be manually called from the `pic_init' and */
180 /* pic_free functions of your module (see FT_DEFINE_MODULE) */ 181 /* `pic_free' functions of your module (see FT_DEFINE_MODULE). */
181 /* */ 182 /* */
182 /* When FT_CONFIG_OPTION_PIC is not defined the array will be */ 183 /* When FT_CONFIG_OPTION_PIC is not defined the array will be */
183 /* allocated in the global scope (or the scope where the macro */ 184 /* allocated in the global scope (or the scope where the macro is */
184 /* is used). */ 185 /* used). */
185 /* */ 186 /* */
186 #ifndef FT_CONFIG_OPTION_PIC 187 #ifndef FT_CONFIG_OPTION_PIC
187 188
188 #define FT_DEFINE_SERVICEDESCREC1(class_, serv_id_1, serv_data_1) \ 189 #define FT_DEFINE_SERVICEDESCREC1( class_, \
189 static const FT_ServiceDescRec class_[] = \ 190 serv_id_1, serv_data_1 ) \
190 { \ 191 static const FT_ServiceDescRec class_[] = \
191 {serv_id_1, serv_data_1}, \ 192 { \
192 {NULL, NULL} \ 193 { serv_id_1, serv_data_1 }, \
193 }; 194 { NULL, NULL } \
194 #define FT_DEFINE_SERVICEDESCREC2(class_, serv_id_1, serv_data_1, \ 195 };
195 serv_id_2, serv_data_2) \ 196
196 static const FT_ServiceDescRec class_[] = \ 197 #define FT_DEFINE_SERVICEDESCREC2( class_, \
197 { \ 198 serv_id_1, serv_data_1, \
198 {serv_id_1, serv_data_1}, \ 199 serv_id_2, serv_data_2 ) \
199 {serv_id_2, serv_data_2}, \ 200 static const FT_ServiceDescRec class_[] = \
200 {NULL, NULL} \ 201 { \
201 }; 202 { serv_id_1, serv_data_1 }, \
202 #define FT_DEFINE_SERVICEDESCREC3(class_, serv_id_1, serv_data_1, \ 203 { serv_id_2, serv_data_2 }, \
203 serv_id_2, serv_data_2, serv_id_3, serv_data_3) \ 204 { NULL, NULL } \
204 static const FT_ServiceDescRec class_[] = \ 205 };
205 { \ 206
206 {serv_id_1, serv_data_1}, \ 207 #define FT_DEFINE_SERVICEDESCREC3( class_, \
207 {serv_id_2, serv_data_2}, \ 208 serv_id_1, serv_data_1, \
208 {serv_id_3, serv_data_3}, \ 209 serv_id_2, serv_data_2, \
209 {NULL, NULL} \ 210 serv_id_3, serv_data_3 ) \
210 }; 211 static const FT_ServiceDescRec class_[] = \
211 #define FT_DEFINE_SERVICEDESCREC4(class_, serv_id_1, serv_data_1, \ 212 { \
212 serv_id_2, serv_data_2, serv_id_3, serv_data_3, \ 213 { serv_id_1, serv_data_1 }, \
213 serv_id_4, serv_data_4) \ 214 { serv_id_2, serv_data_2 }, \
214 static const FT_ServiceDescRec class_[] = \ 215 { serv_id_3, serv_data_3 }, \
215 { \ 216 { NULL, NULL } \
216 {serv_id_1, serv_data_1}, \ 217 };
217 {serv_id_2, serv_data_2}, \ 218
218 {serv_id_3, serv_data_3}, \ 219 #define FT_DEFINE_SERVICEDESCREC4( class_, \
219 {serv_id_4, serv_data_4}, \ 220 serv_id_1, serv_data_1, \
220 {NULL, NULL} \ 221 serv_id_2, serv_data_2, \
221 }; 222 serv_id_3, serv_data_3, \
222 #define FT_DEFINE_SERVICEDESCREC5(class_, serv_id_1, serv_data_1, \ 223 serv_id_4, serv_data_4 ) \
223 serv_id_2, serv_data_2, serv_id_3, serv_data_3, \ 224 static const FT_ServiceDescRec class_[] = \
224 serv_id_4, serv_data_4, serv_id_5, serv_data_5) \ 225 { \
225 static const FT_ServiceDescRec class_[] = \ 226 { serv_id_1, serv_data_1 }, \
226 { \ 227 { serv_id_2, serv_data_2 }, \
227 {serv_id_1, serv_data_1}, \ 228 { serv_id_3, serv_data_3 }, \
228 {serv_id_2, serv_data_2}, \ 229 { serv_id_4, serv_data_4 }, \
229 {serv_id_3, serv_data_3}, \ 230 { NULL, NULL } \
230 {serv_id_4, serv_data_4}, \ 231 };
231 {serv_id_5, serv_data_5}, \ 232
232 {NULL, NULL} \ 233 #define FT_DEFINE_SERVICEDESCREC5( class_, \
233 }; 234 serv_id_1, serv_data_1, \
234 #define FT_DEFINE_SERVICEDESCREC6(class_, serv_id_1, serv_data_1, \ 235 serv_id_2, serv_data_2, \
235 serv_id_2, serv_data_2, serv_id_3, serv_data_3, \ 236 serv_id_3, serv_data_3, \
236 serv_id_4, serv_data_4, serv_id_5, serv_data_5, \ 237 serv_id_4, serv_data_4, \
237 serv_id_6, serv_data_6) \ 238 serv_id_5, serv_data_5 ) \
238 static const FT_ServiceDescRec class_[] = \ 239 static const FT_ServiceDescRec class_[] = \
239 { \ 240 { \
240 {serv_id_1, serv_data_1}, \ 241 { serv_id_1, serv_data_1 }, \
241 {serv_id_2, serv_data_2}, \ 242 { serv_id_2, serv_data_2 }, \
242 {serv_id_3, serv_data_3}, \ 243 { serv_id_3, serv_data_3 }, \
243 {serv_id_4, serv_data_4}, \ 244 { serv_id_4, serv_data_4 }, \
244 {serv_id_5, serv_data_5}, \ 245 { serv_id_5, serv_data_5 }, \
245 {serv_id_6, serv_data_6}, \ 246 { NULL, NULL } \
246 {NULL, NULL} \ 247 };
247 }; 248
248 249 #define FT_DEFINE_SERVICEDESCREC6( class_, \
249 #else /* FT_CONFIG_OPTION_PIC */ 250 serv_id_1, serv_data_1, \
250 251 serv_id_2, serv_data_2, \
251 #define FT_DEFINE_SERVICEDESCREC1(class_, serv_id_1, serv_data_1) \ 252 serv_id_3, serv_data_3, \
252 void \ 253 serv_id_4, serv_data_4, \
253 FT_Destroy_Class_##class_( FT_Library library, \ 254 serv_id_5, serv_data_5, \
254 FT_ServiceDescRec* clazz ) \ 255 serv_id_6, serv_data_6 ) \
255 { \ 256 static const FT_ServiceDescRec class_[] = \
256 FT_Memory memory = library->memory; \ 257 { \
257 if ( clazz ) \ 258 { serv_id_1, serv_data_1 }, \
258 FT_FREE( clazz ); \ 259 { serv_id_2, serv_data_2 }, \
259 } \ 260 { serv_id_3, serv_data_3 }, \
260 \ 261 { serv_id_4, serv_data_4 }, \
261 FT_Error \ 262 { serv_id_5, serv_data_5 }, \
262 FT_Create_Class_##class_( FT_Library library, \ 263 { serv_id_6, serv_data_6 }, \
263 FT_ServiceDescRec** output_class) \ 264 { NULL, NULL } \
264 { \ 265 };
265 FT_ServiceDescRec* clazz; \ 266
266 FT_Error error; \ 267 #else /* FT_CONFIG_OPTION_PIC */
267 FT_Memory memory = library->memory; \ 268
268 \ 269 #define FT_DEFINE_SERVICEDESCREC1( class_, \
269 if ( FT_ALLOC( clazz, sizeof(*clazz)*2 ) ) \ 270 serv_id_1, serv_data_1 ) \
270 return error; \ 271 void \
271 clazz[0].serv_id = serv_id_1; \ 272 FT_Destroy_Class_ ## class_( FT_Library library, \
272 clazz[0].serv_data = serv_data_1; \ 273 FT_ServiceDescRec* clazz ) \
273 clazz[1].serv_id = NULL; \ 274 { \
274 clazz[1].serv_data = NULL; \ 275 FT_Memory memory = library->memory; \
275 *output_class = clazz; \ 276 \
276 return FT_Err_Ok; \ 277 \
277 } 278 if ( clazz ) \
278 279 FT_FREE( clazz ); \
279 #define FT_DEFINE_SERVICEDESCREC2(class_, serv_id_1, serv_data_1, \ 280 } \
280 serv_id_2, serv_data_2) \ 281 \
281 void \ 282 FT_Error \
282 FT_Destroy_Class_##class_( FT_Library library, \ 283 FT_Create_Class_ ## class_( FT_Library library, \
283 FT_ServiceDescRec* clazz ) \ 284 FT_ServiceDescRec** output_class ) \
284 { \ 285 { \
285 FT_Memory memory = library->memory; \ 286 FT_ServiceDescRec* clazz; \
286 if ( clazz ) \ 287 FT_Error error; \
287 FT_FREE( clazz ); \ 288 FT_Memory memory = library->memory; \
288 } \ 289 \
289 \ 290 \
290 FT_Error \ 291 if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 2 ) ) \
291 FT_Create_Class_##class_( FT_Library library, \ 292 return error; \
292 FT_ServiceDescRec** output_class) \ 293 \
293 { \ 294 clazz[0].serv_id = serv_id_1; \
294 FT_ServiceDescRec* clazz; \ 295 clazz[0].serv_data = serv_data_1; \
295 FT_Error error; \ 296 clazz[1].serv_id = NULL; \
296 FT_Memory memory = library->memory; \ 297 clazz[1].serv_data = NULL; \
297 \ 298 \
298 if ( FT_ALLOC( clazz, sizeof(*clazz)*3 ) ) \ 299 *output_class = clazz; \
299 return error; \ 300 \
300 clazz[0].serv_id = serv_id_1; \ 301 return FT_Err_Ok; \
301 clazz[0].serv_data = serv_data_1; \ 302 }
302 clazz[1].serv_id = serv_id_2; \ 303
303 clazz[1].serv_data = serv_data_2; \ 304 #define FT_DEFINE_SERVICEDESCREC2( class_, \
304 clazz[2].serv_id = NULL; \ 305 serv_id_1, serv_data_1, \
305 clazz[2].serv_data = NULL; \ 306 serv_id_2, serv_data_2 ) \
306 *output_class = clazz; \ 307 void \
307 return FT_Err_Ok; \ 308 FT_Destroy_Class_ ## class_( FT_Library library, \
308 } 309 FT_ServiceDescRec* clazz ) \
309 310 { \
310 #define FT_DEFINE_SERVICEDESCREC3(class_, serv_id_1, serv_data_1, \ 311 FT_Memory memory = library->memory; \
311 serv_id_2, serv_data_2, serv_id_3, serv_data_3) \ 312 \
312 void \ 313 \
313 FT_Destroy_Class_##class_( FT_Library library, \ 314 if ( clazz ) \
314 FT_ServiceDescRec* clazz ) \ 315 FT_FREE( clazz ); \
315 { \ 316 } \
316 FT_Memory memory = library->memory; \ 317 \
317 if ( clazz ) \ 318 FT_Error \
318 FT_FREE( clazz ); \ 319 FT_Create_Class_ ## class_( FT_Library library, \
319 } \ 320 FT_ServiceDescRec** output_class ) \
320 \ 321 { \
321 FT_Error \ 322 FT_ServiceDescRec* clazz; \
322 FT_Create_Class_##class_( FT_Library library, \ 323 FT_Error error; \
323 FT_ServiceDescRec** output_class) \ 324 FT_Memory memory = library->memory; \
324 { \ 325 \
325 FT_ServiceDescRec* clazz; \ 326 \
326 FT_Error error; \ 327 if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 3 ) ) \
327 FT_Memory memory = library->memory; \ 328 return error; \
328 \ 329 \
329 if ( FT_ALLOC( clazz, sizeof(*clazz)*4 ) ) \ 330 clazz[0].serv_id = serv_id_1; \
330 return error; \ 331 clazz[0].serv_data = serv_data_1; \
331 clazz[0].serv_id = serv_id_1; \ 332 clazz[1].serv_id = serv_id_2; \
332 clazz[0].serv_data = serv_data_1; \ 333 clazz[1].serv_data = serv_data_2; \
333 clazz[1].serv_id = serv_id_2; \ 334 clazz[2].serv_id = NULL; \
334 clazz[1].serv_data = serv_data_2; \ 335 clazz[2].serv_data = NULL; \
335 clazz[2].serv_id = serv_id_3; \ 336 \
336 clazz[2].serv_data = serv_data_3; \ 337 *output_class = clazz; \
337 clazz[3].serv_id = NULL; \ 338 \
338 clazz[3].serv_data = NULL; \ 339 return FT_Err_Ok; \
339 *output_class = clazz; \ 340 }
340 return FT_Err_Ok; \ 341
341 } 342 #define FT_DEFINE_SERVICEDESCREC3( class_, \
342 343 serv_id_1, serv_data_1, \
343 #define FT_DEFINE_SERVICEDESCREC4(class_, serv_id_1, serv_data_1, \ 344 serv_id_2, serv_data_2, \
344 serv_id_2, serv_data_2, serv_id_3, serv_data_3, \ 345 serv_id_3, serv_data_3 ) \
345 serv_id_4, serv_data_4) \ 346 void \
346 void \ 347 FT_Destroy_Class_ ## class_( FT_Library library, \
347 FT_Destroy_Class_##class_( FT_Library library, \ 348 FT_ServiceDescRec* clazz ) \
348 FT_ServiceDescRec* clazz ) \ 349 { \
349 { \ 350 FT_Memory memory = library->memory; \
350 FT_Memory memory = library->memory; \ 351 \
351 if ( clazz ) \ 352 \
352 FT_FREE( clazz ); \ 353 if ( clazz ) \
353 } \ 354 FT_FREE( clazz ); \
354 \ 355 } \
355 FT_Error \ 356 \
356 FT_Create_Class_##class_( FT_Library library, \ 357 FT_Error \
357 FT_ServiceDescRec** output_class) \ 358 FT_Create_Class_ ## class_( FT_Library library, \
358 { \ 359 FT_ServiceDescRec** output_class ) \
359 FT_ServiceDescRec* clazz; \ 360 { \
360 FT_Error error; \ 361 FT_ServiceDescRec* clazz; \
361 FT_Memory memory = library->memory; \ 362 FT_Error error; \
362 \ 363 FT_Memory memory = library->memory; \
363 if ( FT_ALLOC( clazz, sizeof(*clazz)*5 ) ) \ 364 \
364 return error; \ 365 \
365 clazz[0].serv_id = serv_id_1; \ 366 if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 4 ) ) \
366 clazz[0].serv_data = serv_data_1; \ 367 return error; \
367 clazz[1].serv_id = serv_id_2; \ 368 \
368 clazz[1].serv_data = serv_data_2; \ 369 clazz[0].serv_id = serv_id_1; \
369 clazz[2].serv_id = serv_id_3; \ 370 clazz[0].serv_data = serv_data_1; \
370 clazz[2].serv_data = serv_data_3; \ 371 clazz[1].serv_id = serv_id_2; \
371 clazz[3].serv_id = serv_id_4; \ 372 clazz[1].serv_data = serv_data_2; \
372 clazz[3].serv_data = serv_data_4; \ 373 clazz[2].serv_id = serv_id_3; \
373 clazz[4].serv_id = NULL; \ 374 clazz[2].serv_data = serv_data_3; \
374 clazz[4].serv_data = NULL; \ 375 clazz[3].serv_id = NULL; \
375 *output_class = clazz; \ 376 clazz[3].serv_data = NULL; \
376 return FT_Err_Ok; \ 377 \
377 } 378 *output_class = clazz; \
378 379 \
379 #define FT_DEFINE_SERVICEDESCREC5(class_, serv_id_1, serv_data_1, \ 380 return FT_Err_Ok; \
380 serv_id_2, serv_data_2, serv_id_3, serv_data_3, serv_id_4, \ 381 }
381 serv_data_4, serv_id_5, serv_data_5) \ 382
382 void \ 383 #define FT_DEFINE_SERVICEDESCREC4( class_, \
383 FT_Destroy_Class_##class_( FT_Library library, \ 384 serv_id_1, serv_data_1, \
384 FT_ServiceDescRec* clazz ) \ 385 serv_id_2, serv_data_2, \
385 { \ 386 serv_id_3, serv_data_3, \
386 FT_Memory memory = library->memory; \ 387 serv_id_4, serv_data_4 ) \
387 if ( clazz ) \ 388 void \
388 FT_FREE( clazz ); \ 389 FT_Destroy_Class_ ## class_( FT_Library library, \
389 } \ 390 FT_ServiceDescRec* clazz ) \
390 \ 391 { \
391 FT_Error \ 392 FT_Memory memory = library->memory; \
392 FT_Create_Class_##class_( FT_Library library, \ 393 \
393 FT_ServiceDescRec** output_class) \ 394 \
394 { \ 395 if ( clazz ) \
395 FT_ServiceDescRec* clazz; \ 396 FT_FREE( clazz ); \
396 FT_Error error; \ 397 } \
397 FT_Memory memory = library->memory; \ 398 \
398 \ 399 FT_Error \
399 if ( FT_ALLOC( clazz, sizeof(*clazz)*6 ) ) \ 400 FT_Create_Class_ ## class_( FT_Library library, \
400 return error; \ 401 FT_ServiceDescRec** output_class ) \
401 clazz[0].serv_id = serv_id_1; \ 402 { \
402 clazz[0].serv_data = serv_data_1; \ 403 FT_ServiceDescRec* clazz; \
403 clazz[1].serv_id = serv_id_2; \ 404 FT_Error error; \
404 clazz[1].serv_data = serv_data_2; \ 405 FT_Memory memory = library->memory; \
405 clazz[2].serv_id = serv_id_3; \ 406 \
406 clazz[2].serv_data = serv_data_3; \ 407 \
407 clazz[3].serv_id = serv_id_4; \ 408 if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 5 ) ) \
408 clazz[3].serv_data = serv_data_4; \ 409 return error; \
409 clazz[4].serv_id = serv_id_5; \ 410 \
410 clazz[4].serv_data = serv_data_5; \ 411 clazz[0].serv_id = serv_id_1; \
411 clazz[5].serv_id = NULL; \ 412 clazz[0].serv_data = serv_data_1; \
412 clazz[5].serv_data = NULL; \ 413 clazz[1].serv_id = serv_id_2; \
413 *output_class = clazz; \ 414 clazz[1].serv_data = serv_data_2; \
414 return FT_Err_Ok; \ 415 clazz[2].serv_id = serv_id_3; \
415 } 416 clazz[2].serv_data = serv_data_3; \
416 417 clazz[3].serv_id = serv_id_4; \
417 #define FT_DEFINE_SERVICEDESCREC6(class_, serv_id_1, serv_data_1, \ 418 clazz[3].serv_data = serv_data_4; \
418 serv_id_2, serv_data_2, serv_id_3, serv_data_3, \ 419 clazz[4].serv_id = NULL; \
419 serv_id_4, serv_data_4, serv_id_5, serv_data_5, \ 420 clazz[4].serv_data = NULL; \
420 serv_id_6, serv_data_6) \ 421 \
421 void \ 422 *output_class = clazz; \
422 FT_Destroy_Class_##class_( FT_Library library, \ 423 \
423 FT_ServiceDescRec* clazz ) \ 424 return FT_Err_Ok; \
424 { \ 425 }
425 FT_Memory memory = library->memory; \ 426
426 if ( clazz ) \ 427 #define FT_DEFINE_SERVICEDESCREC5( class_, \
427 FT_FREE( clazz ); \ 428 serv_id_1, serv_data_1, \
428 } \ 429 serv_id_2, serv_data_2, \
429 \ 430 serv_id_3, serv_data_3, \
430 FT_Error \ 431 serv_id_4, serv_data_4, \
431 FT_Create_Class_##class_( FT_Library library, \ 432 serv_id_5, serv_data_5 ) \
432 FT_ServiceDescRec** output_class) \ 433 void \
433 { \ 434 FT_Destroy_Class_ ## class_( FT_Library library, \
434 FT_ServiceDescRec* clazz; \ 435 FT_ServiceDescRec* clazz ) \
435 FT_Error error; \ 436 { \
436 FT_Memory memory = library->memory; \ 437 FT_Memory memory = library->memory; \
437 \ 438 \
438 if ( FT_ALLOC( clazz, sizeof(*clazz)*7 ) ) \ 439 \
439 return error; \ 440 if ( clazz ) \
440 clazz[0].serv_id = serv_id_1; \ 441 FT_FREE( clazz ); \
441 clazz[0].serv_data = serv_data_1; \ 442 } \
442 clazz[1].serv_id = serv_id_2; \ 443 \
443 clazz[1].serv_data = serv_data_2; \ 444 FT_Error \
444 clazz[2].serv_id = serv_id_3; \ 445 FT_Create_Class_ ## class_( FT_Library library, \
445 clazz[2].serv_data = serv_data_3; \ 446 FT_ServiceDescRec** output_class ) \
446 clazz[3].serv_id = serv_id_4; \ 447 { \
447 clazz[3].serv_data = serv_data_4; \ 448 FT_ServiceDescRec* clazz; \
448 clazz[4].serv_id = serv_id_5; \ 449 FT_Error error; \
449 clazz[4].serv_data = serv_data_5; \ 450 FT_Memory memory = library->memory; \
450 clazz[5].serv_id = serv_id_6; \ 451 \
451 clazz[5].serv_data = serv_data_6; \ 452 \
452 clazz[6].serv_id = NULL; \ 453 if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 6 ) ) \
453 clazz[6].serv_data = NULL; \ 454 return error; \
454 *output_class = clazz; \ 455 \
455 return FT_Err_Ok; \ 456 clazz[0].serv_id = serv_id_1; \
456 } 457 clazz[0].serv_data = serv_data_1; \
457 #endif /* FT_CONFIG_OPTION_PIC */ 458 clazz[1].serv_id = serv_id_2; \
459 clazz[1].serv_data = serv_data_2; \
460 clazz[2].serv_id = serv_id_3; \
461 clazz[2].serv_data = serv_data_3; \
462 clazz[3].serv_id = serv_id_4; \
463 clazz[3].serv_data = serv_data_4; \
464 clazz[4].serv_id = serv_id_5; \
465 clazz[4].serv_data = serv_data_5; \
466 clazz[5].serv_id = NULL; \
467 clazz[5].serv_data = NULL; \
468 \
469 *output_class = clazz; \
470 \
471 return FT_Err_Ok; \
472 }
473
474 #define FT_DEFINE_SERVICEDESCREC6( class_, \
475 serv_id_1, serv_data_1, \
476 serv_id_2, serv_data_2, \
477 serv_id_3, serv_data_3, \
478 serv_id_4, serv_data_4, \
479 serv_id_5, serv_data_5, \
480 serv_id_6, serv_data_6 ) \
481 void \
482 FT_Destroy_Class_ ## class_( FT_Library library, \
483 FT_ServiceDescRec* clazz ) \
484 { \
485 FT_Memory memory = library->memory; \
486 \
487 \
488 if ( clazz ) \
489 FT_FREE( clazz ); \
490 } \
491 \
492 FT_Error \
493 FT_Create_Class_ ## class_( FT_Library library, \
494 FT_ServiceDescRec** output_class) \
495 { \
496 FT_ServiceDescRec* clazz; \
497 FT_Error error; \
498 FT_Memory memory = library->memory; \
499 \
500 \
501 if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 7 ) ) \
502 return error; \
503 \
504 clazz[0].serv_id = serv_id_1; \
505 clazz[0].serv_data = serv_data_1; \
506 clazz[1].serv_id = serv_id_2; \
507 clazz[1].serv_data = serv_data_2; \
508 clazz[2].serv_id = serv_id_3; \
509 clazz[2].serv_data = serv_data_3; \
510 clazz[3].serv_id = serv_id_4; \
511 clazz[3].serv_data = serv_data_4; \
512 clazz[4].serv_id = serv_id_5; \
513 clazz[4].serv_data = serv_data_5; \
514 clazz[5].serv_id = serv_id_6; \
515 clazz[5].serv_data = serv_data_6; \
516 clazz[6].serv_id = NULL; \
517 clazz[6].serv_data = NULL; \
518 \
519 *output_class = clazz; \
520 \
521 return FT_Err_Ok; \
522 }
523
524 #endif /* FT_CONFIG_OPTION_PIC */
525
458 526
459 /* 527 /*
460 * Parse a list of FT_ServiceDescRec descriptors and look for 528 * Parse a list of FT_ServiceDescRec descriptors and look for
461 * a specific service by ID. Note that the last element in the 529 * a specific service by ID. Note that the last element in the
462 * array must be { NULL, NULL }, and that the function should 530 * array must be { NULL, NULL }, and that the function should
463 * return NULL if the service isn't available. 531 * return NULL if the service isn't available.
464 * 532 *
465 * This function can be used by modules to implement their 533 * This function can be used by modules to implement their
466 * `get_service' method. 534 * `get_service' method.
467 */ 535 */
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
611 #define FT_SERVICE_TRUETYPE_GLYF_H <freetype/internal/services/svttglyf.h> 679 #define FT_SERVICE_TRUETYPE_GLYF_H <freetype/internal/services/svttglyf.h>
612 680
613 /* */ 681 /* */
614 682
615 FT_END_HEADER 683 FT_END_HEADER
616 684
617 #endif /* __FTSERV_H__ */ 685 #endif /* __FTSERV_H__ */
618 686
619 687
620 /* END */ 688 /* END */
OLDNEW
« no previous file with comments | « include/freetype/internal/ftrfork.h ('k') | include/freetype/internal/ftstream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698