bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
- const hb_set_t &glyphset = *c->plan->glyphset;
+ const hb_set_t &glyphset = *c->plan->glyphset ();
const hb_map_t &glyph_map = *c->plan->glyph_map;
- hb_vector_t<GlyphID> glyphs;
+ hb_sorted_vector_t<GlyphID> glyphs;
hb_vector_t<HBUINT16> klasses;
hb_codepoint_t start = startGlyph;
bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
- const hb_set_t &glyphset = *c->plan->glyphset;
+ const hb_set_t &glyphset = *c->plan->glyphset ();
const hb_map_t &glyph_map = *c->plan->glyph_map;
- hb_vector_t<GlyphID> from;
+ hb_sorted_vector_t<GlyphID> from;
hb_vector_t<GlyphID> to;
hb_codepoint_t delta = deltaGlyphID;
- for (Coverage::Iter iter (this+coverage); iter.more (); iter.next ())
+ for (auto it = hb_iter (this+coverage)
+ | hb_filter (glyphset); it; ++it)
{
- if (!glyphset.has (iter.get_glyph ())) continue;
- from.push ()->set (glyph_map[iter.get_glyph ()]);
- to.push ()->set (glyph_map[(iter.get_glyph () + delta) & 0xFFFF]);
+ from.push ()->set (glyph_map[*it]);
+ to.push ()->set (glyph_map[(*it + delta) & 0xFFFF]);
}
c->serializer->propagate_error (from, to);
SingleSubst_serialize (c->serializer, from, to);
bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
- const hb_set_t &glyphset = *c->plan->glyphset;
+ const hb_set_t &glyphset = *c->plan->glyphset ();
const hb_map_t &glyph_map = *c->plan->glyph_map;
- hb_vector_t<GlyphID> from;
+ hb_sorted_vector_t<GlyphID> from;
hb_vector_t<GlyphID> to;
- for (Coverage::Iter iter (this+coverage); iter.more (); iter.next ())
+ for (auto it = hb_zip (this+coverage, substitute)
+ | hb_filter (glyphset, hb_first); it; ++it)
{
- if (!glyphset.has (iter.get_glyph ())) continue;
- from.push ()->set (glyph_map[iter.get_glyph ()]);
- to.push ()->set (glyph_map[substitute[iter.get_coverage ()]]);
+ from.push ()->set (glyph_map[it->first]);
+ to.push ()->set (glyph_map[it->second]);
}
c->serializer->propagate_error (from, to);
SingleSubst_serialize (c->serializer, from, to);