14
16
#elif defined(CREATE_COMPARISON_FUNCTIONS)
15
17
#undef CREATE_COMPARISON_FUNCTIONS
16
18
#define START(funcname, structname) \
17
static int funcname##_compare(void *key1, void *key2, size_t key_size) \
19
static unsigned funcname##_compare(void *key1, void *key2, size_t key_size) \
19
21
struct structname *a = key1; \
20
22
struct structname *b = key2; \
21
23
return // conditions follow
22
24
#define GENERIC(type, member) \
23
25
a->member == b->member &&
26
#define STRING(member) \
27
strcmp(a->member, b->member) == 0 &&
24
28
#define FTVECTOR(member) \
25
29
a->member.x == b->member.x && a->member.y == b->member.y &&
26
30
#define BITMAPHASHKEY(member) \
38
42
unsigned hval = FNV1_32A_INIT;
39
43
#define GENERIC(type, member) \
40
44
hval = fnv_32a_buf(&p->member, sizeof(p->member), hval);
45
#define STRING(member) \
46
hval = fnv_32a_str(p->member, hval);
41
47
#define FTVECTOR(member) GENERIC(, member.x); GENERIC(, member.y);
42
48
#define BITMAPHASHKEY(member) { \
43
49
unsigned temp = bitmap_hash(&p->member, sizeof(p->member)); \
56
// describes a bitmap; bitmaps with equivalents structs are considered identical
57
START(bitmap, bitmap_hash_key)
58
GENERIC(char, bitmap) // bool : true = bitmap, false = outline
59
GENERIC(ASS_Font *, font)
60
GENERIC(double, size) // font size
61
GENERIC(uint32_t, ch) // character code
62
FTVECTOR(outline) // border width, 16.16 fixed point value
62
// describes an outline bitmap
63
START(outline_bitmap, outline_bitmap_hash_key)
64
GENERIC(OutlineHashValue *, outline)
65
65
GENERIC(char, be) // blur edges
66
66
GENERIC(double, blur) // gaussian blur
67
GENERIC(unsigned, scale_x) // 16.16
68
GENERIC(unsigned, scale_y) // 16.16
69
67
GENERIC(int, frx) // signed 16.16
70
68
GENERIC(int, fry) // signed 16.16
71
69
GENERIC(int, frz) // signed 16.16
78
76
GENERIC(int, shift_y)
79
77
FTVECTOR(advance) // subpixel shift vector
80
78
FTVECTOR(shadow_offset) // shadow subpixel shift
81
GENERIC(unsigned, drawing_hash) // hashcode of a drawing
82
GENERIC(unsigned, flags) // glyph decoration
83
GENERIC(unsigned, border_style)
79
END(OutlineBitmapHashKey)
81
// describe a clip mask bitmap
82
START(clip_bitmap, clip_bitmap_hash_key)
86
86
// describes an outline glyph
87
87
START(glyph, glyph_hash_key)
88
88
GENERIC(ASS_Font *, font)
89
89
GENERIC(double, size) // font size
90
GENERIC(uint32_t, ch) // character code
90
GENERIC(int, face_index)
91
GENERIC(int, glyph_index)
92
93
GENERIC(int, italic)
93
94
GENERIC(unsigned, scale_x) // 16.16
94
95
GENERIC(unsigned, scale_y) // 16.16
95
96
FTVECTOR(outline) // border width, 16.16
96
GENERIC(unsigned, drawing_hash) // hashcode of a drawing
97
97
GENERIC(unsigned, flags) // glyph decoration flags
98
98
GENERIC(unsigned, border_style)
101
START(glyph_metrics, glyph_metrics_hash_key)
102
GENERIC(ASS_Font *, font)
103
GENERIC(double, size)
104
GENERIC(int, face_index)
105
GENERIC(int, glyph_index)
106
GENERIC(unsigned, scale_x)
107
GENERIC(unsigned, scale_y)
108
END(GlyphMetricsHashKey)
110
// describes an outline drawing
111
START(drawing, drawing_hash_key)
112
GENERIC(unsigned, scale_x)
113
GENERIC(unsigned, scale_y)
116
GENERIC(unsigned, border_style)
118
GENERIC(unsigned, hash)
101
122
// Cache for composited bitmaps
102
123
START(composite, composite_hash_key)