[layout] Use dispatch() for add_coverage()

This commit is contained in:
Behdad Esfahbod 2015-02-17 19:15:34 +03:00
parent 50b8dc79da
commit 8e36ccfd4f
3 changed files with 14 additions and 22 deletions

View File

@ -1506,16 +1506,8 @@ struct PosLookup : Lookup
template <typename set_t> template <typename set_t>
inline void add_coverage (set_t *glyphs) const inline void add_coverage (set_t *glyphs) const
{ {
hb_get_coverage_context_t c; hb_add_coverage_context_t<set_t> c (glyphs);
const Coverage *last = NULL; dispatch (&c);
unsigned int count = get_subtable_count ();
for (unsigned int i = 0; i < count; i++) {
const Coverage *coverage = &get_subtable (i).dispatch (&c, get_type ());
if (coverage != last) {
coverage->add_coverage (glyphs);
last = coverage;
}
}
} }
inline bool apply_once (hb_apply_context_t *c) const inline bool apply_once (hb_apply_context_t *c) const

View File

@ -1200,16 +1200,8 @@ struct SubstLookup : Lookup
template <typename set_t> template <typename set_t>
inline void add_coverage (set_t *glyphs) const inline void add_coverage (set_t *glyphs) const
{ {
hb_get_coverage_context_t c; hb_add_coverage_context_t<set_t> c (glyphs);
const Coverage *last = NULL; dispatch (&c);
unsigned int count = get_subtable_count ();
for (unsigned int i = 0; i < count; i++) {
const Coverage *coverage = &get_subtable (i).dispatch (&c, get_type ());
if (coverage != last) {
coverage->add_coverage (glyphs);
last = coverage;
}
}
} }
inline bool would_apply (hb_would_apply_context_t *c, inline bool would_apply (hb_would_apply_context_t *c,

View File

@ -238,7 +238,8 @@ struct hb_collect_glyphs_context_t
#define HB_DEBUG_GET_COVERAGE (HB_DEBUG+0) #define HB_DEBUG_GET_COVERAGE (HB_DEBUG+0)
#endif #endif
struct hb_get_coverage_context_t template <typename set_t>
struct hb_add_coverage_context_t
{ {
inline const char *get_name (void) { return "GET_COVERAGE"; } inline const char *get_name (void) { return "GET_COVERAGE"; }
static const unsigned int max_debug_depth = HB_DEBUG_GET_COVERAGE; static const unsigned int max_debug_depth = HB_DEBUG_GET_COVERAGE;
@ -248,10 +249,17 @@ struct hb_get_coverage_context_t
template <typename T> template <typename T>
inline return_t dispatch (const T &obj) { return obj.get_coverage (); } inline return_t dispatch (const T &obj) { return obj.get_coverage (); }
static return_t default_return_value (void) { return Null(Coverage); } static return_t default_return_value (void) { return Null(Coverage); }
bool stop_sublookup_iteration (return_t r) const
{
r.add_coverage (set);
return false;
}
hb_get_coverage_context_t (void) : hb_add_coverage_context_t (set_t *set_) :
set (set_),
debug_depth (0) {} debug_depth (0) {}
set_t *set;
unsigned int debug_depth; unsigned int debug_depth;
}; };