| 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 |