mirror of
https://github.com/harfbuzz/harfbuzz.git
synced 2025-04-14 17:13:40 +00:00
[gsubgpos] Keep another digest in the applicable_t
The digest for all the remaining subtables combined. The idea is to get out of the subtable look as soon as no more can be applied. Doesn't seem to speed up anything I tested. Going to revert.
This commit is contained in:
parent
e3fd69c889
commit
fd79c7cecd
1 changed files with 22 additions and 10 deletions
|
@ -1002,6 +1002,7 @@ struct hb_accelerate_subtables_context_t :
|
|||
hb_cache_func_t cache_func;
|
||||
#endif
|
||||
hb_set_digest_t digest;
|
||||
hb_set_digest_t digest_rest;
|
||||
};
|
||||
|
||||
#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
|
||||
|
@ -4339,6 +4340,12 @@ struct hb_ot_layout_lookup_accelerator_t
|
|||
thiz->digest.init ();
|
||||
for (auto& subtable : hb_iter (thiz->subtables, count))
|
||||
thiz->digest.add (subtable.digest);
|
||||
if (count)
|
||||
for (unsigned int i = count - 1; i; i--)
|
||||
{
|
||||
thiz->subtables[i - 1].digest_rest.add (thiz->subtables[i].digest);
|
||||
thiz->subtables[i - 1].digest_rest.add (thiz->subtables[i].digest_rest);
|
||||
}
|
||||
|
||||
#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
|
||||
thiz->cache_user_idx = c_accelerate_subtables.cache_user_idx;
|
||||
|
@ -4358,23 +4365,28 @@ struct hb_ot_layout_lookup_accelerator_t
|
|||
#endif
|
||||
bool apply (hb_ot_apply_context_t *c, unsigned subtables_count, bool use_cache) const
|
||||
{
|
||||
hb_codepoint_t g = c->buffer->cur().codepoint;
|
||||
#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
|
||||
if (use_cache)
|
||||
{
|
||||
return
|
||||
+ hb_iter (hb_iter (subtables, subtables_count))
|
||||
| hb_map ([&c] (const hb_accelerate_subtables_context_t::hb_applicable_t &_) { return _.apply_cached (c); })
|
||||
| hb_any
|
||||
;
|
||||
for (const auto &subtable : hb_iter (subtables, subtables_count))
|
||||
{
|
||||
if (subtable.apply_cached (c))
|
||||
return true;
|
||||
if (!subtable.digest_rest.may_have (g))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
return
|
||||
+ hb_iter (hb_iter (subtables, subtables_count))
|
||||
| hb_map ([&c] (const hb_accelerate_subtables_context_t::hb_applicable_t &_) { return _.apply (c); })
|
||||
| hb_any
|
||||
;
|
||||
for (const auto &subtable : hb_iter (subtables, subtables_count))
|
||||
{
|
||||
if (subtable.apply (c))
|
||||
return true;
|
||||
if (!subtable.digest_rest.may_have (g))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue