[layout] Speed up ClassDefFormat2 intersects

This commit is contained in:
Behdad Esfahbod 2022-12-03 13:33:48 -07:00
parent 85e7263b38
commit 5596a73087
1 changed files with 8 additions and 5 deletions

View File

@ -1900,13 +1900,16 @@ struct ClassDefFormat2_4
bool intersects (const hb_set_t *glyphs) const
{
/* TODO Speed up, using hb_set_next() and bsearch()? */
for (auto &range : rangeRecord)
if (rangeRecord.len > glyphs->get_population () * hb_bit_storage ((unsigned) rangeRecord.len) / 2)
{
if (range.intersects (*glyphs) && range.value)
return true;
for (hb_codepoint_t g = HB_SET_VALUE_INVALID; glyphs->next (&g);)
if (get_class (g))
return true;
return false;
}
return false;
return hb_any (+ hb_iter (rangeRecord)
| hb_map ([glyphs] (const RangeRecord<Types> &range) { return range.intersects (*glyphs) && range.value; }));
}
bool intersects_class (const hb_set_t *glyphs, uint16_t klass) const
{