OLD | NEW |
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 Loading... |
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 Loading... |
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 */ |
OLD | NEW |