Import libdvdnav / libdvdread4 from mplayerhq.hu (r1174)
[mplayer/kovensky.git] / libass / ass_cache_template.c
blob7f9ec95f570348f464c08b7b157efefb392a989f
1 #ifdef CREATE_STRUCT_DEFINITIONS
2 #undef CREATE_STRUCT_DEFINITIONS
3 #define START(funcname, structname) \
4 typedef struct structname {
5 #define GENERIC(type, member) \
6 type member;
7 #define FTVECTOR(member) \
8 FT_Vector member;
9 #define END(typedefnamename) \
10 } typedefnamename;
12 #elif defined(CREATE_COMPARISON_FUNCTIONS)
13 #undef CREATE_COMPARISON_FUNCTIONS
14 #define START(funcname, structname) \
15 static int funcname##_compare(void *key1, void *key2, size_t key_size) \
16 { \
17 struct structname *a = key1; \
18 struct structname *b = key2; \
19 return // conditions follow
20 #define GENERIC(type, member) \
21 a->member == b->member &&
22 #define FTVECTOR(member) \
23 a->member.x == b->member.x && a->member.y == b->member.y &&
24 #define END(typedefname) \
25 1; \
28 #elif defined(CREATE_HASH_FUNCTIONS)
29 #undef CREATE_HASH_FUNCTIONS
30 #define START(funcname, structname) \
31 static unsigned funcname##_hash(void *buf, size_t len) \
32 { \
33 struct structname *p = buf; \
34 unsigned hval = FNV1_32A_INIT;
35 #define GENERIC(type, member) \
36 hval = fnv_32a_buf(&p->member, sizeof(p->member), hval);
37 #define FTVECTOR(member) GENERIC(, member.x); GENERIC(, member.y);
38 #define END(typedefname) \
39 return hval; \
42 #else
43 #error missing defines
44 #endif
48 // describes a bitmap; bitmaps with equivalents structs are considered identical
49 START(bitmap, bipmap_hash_key_s)
50 GENERIC(char, bitmap) // bool : true = bitmap, false = outline
51 GENERIC(ass_font_t *, font)
52 GENERIC(double, size) // font size
53 GENERIC(uint32_t, ch) // character code
54 GENERIC(unsigned, outline) // border width, 16.16 fixed point value
55 GENERIC(int, bold)
56 GENERIC(int, italic)
57 GENERIC(char, be) // blur edges
58 GENERIC(double, blur) // gaussian blur
59 GENERIC(unsigned, scale_x) // 16.16
60 GENERIC(unsigned, scale_y) // 16.16
61 GENERIC(int, frx) // signed 16.16
62 GENERIC(int, fry) // signed 16.16
63 GENERIC(int, frz) // signed 16.16
64 // shift vector that was added to glyph before applying rotation
65 // = 0, if frx = fry = frx = 0
66 // = (glyph base point) - (rotation origin), otherwise
67 GENERIC(int, shift_x)
68 GENERIC(int, shift_y)
69 FTVECTOR(advance) // subpixel shift vector
70 END(bitmap_hash_key_t)
72 // describes an outline glyph
73 START(glyph, glyph_hash_key_s)
74 GENERIC(ass_font_t *, font)
75 GENERIC(double, size) // font size
76 GENERIC(uint32_t, ch) // character code
77 GENERIC(int, bold)
78 GENERIC(int, italic)
79 GENERIC(unsigned, scale_x) // 16.16
80 GENERIC(unsigned, scale_y) // 16.16
81 FTVECTOR(advance) // subpixel shift vector
82 GENERIC(unsigned, outline) // border width, 16.16
83 END(glyph_hash_key_t)
85 #undef START
86 #undef GENERIC
87 #undef FTVECTOR
88 #undef END