From 514564f5444b8ad2f210b1e3d7d66378f7275317 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 29 Jan 2015 13:48:48 +0100 Subject: [PATCH] [layout] Move skippy_iter setup from constructor into init() --- src/hb-ot-layout-gpos-table.hh | 18 ++++++++++++------ src/hb-ot-layout-gsubgpos-private.hh | 28 +++++++++++++++------------- src/hb-ot-shape-fallback.cc | 3 ++- 3 files changed, 29 insertions(+), 20 deletions(-) diff --git a/src/hb-ot-layout-gpos-table.hh b/src/hb-ot-layout-gpos-table.hh index 321453c2f..dc3f40b1d 100644 --- a/src/hb-ot-layout-gpos-table.hh +++ b/src/hb-ot-layout-gpos-table.hh @@ -684,7 +684,8 @@ struct PairPosFormat1 unsigned int index = (this+coverage).get_coverage (buffer->cur().codepoint); if (likely (index == NOT_COVERED)) return TRACE_RETURN (false); - hb_apply_context_t::skipping_iterator_t skippy_iter (c); + hb_apply_context_t::skipping_iterator_t skippy_iter; + skippy_iter.init (c); skippy_iter.reset (buffer->idx, 1); if (!skippy_iter.next ()) return TRACE_RETURN (false); @@ -754,7 +755,8 @@ struct PairPosFormat2 unsigned int index = (this+coverage).get_coverage (buffer->cur().codepoint); if (likely (index == NOT_COVERED)) return TRACE_RETURN (false); - hb_apply_context_t::skipping_iterator_t skippy_iter (c); + hb_apply_context_t::skipping_iterator_t skippy_iter; + skippy_iter.init (c); skippy_iter.reset (buffer->idx, 1); if (!skippy_iter.next ()) return TRACE_RETURN (false); @@ -904,7 +906,8 @@ struct CursivePosFormat1 const EntryExitRecord &this_record = entryExitRecord[(this+coverage).get_coverage (buffer->cur().codepoint)]; if (!this_record.exitAnchor) return TRACE_RETURN (false); - hb_apply_context_t::skipping_iterator_t skippy_iter (c); + hb_apply_context_t::skipping_iterator_t skippy_iter; + skippy_iter.init (c); skippy_iter.reset (buffer->idx, 1); if (!skippy_iter.next ()) return TRACE_RETURN (false); @@ -1048,7 +1051,8 @@ struct MarkBasePosFormat1 if (likely (mark_index == NOT_COVERED)) return TRACE_RETURN (false); /* now we search backwards for a non-mark glyph */ - hb_apply_context_t::skipping_iterator_t skippy_iter (c); + hb_apply_context_t::skipping_iterator_t skippy_iter; + skippy_iter.init (c); skippy_iter.reset (buffer->idx, 1); skippy_iter.set_lookup_props (LookupFlag::IgnoreMarks); do { @@ -1153,7 +1157,8 @@ struct MarkLigPosFormat1 if (likely (mark_index == NOT_COVERED)) return TRACE_RETURN (false); /* now we search backwards for a non-mark glyph */ - hb_apply_context_t::skipping_iterator_t skippy_iter (c); + hb_apply_context_t::skipping_iterator_t skippy_iter; + skippy_iter.init (c); skippy_iter.reset (buffer->idx, 1); skippy_iter.set_lookup_props (LookupFlag::IgnoreMarks); if (!skippy_iter.prev ()) return TRACE_RETURN (false); @@ -1270,7 +1275,8 @@ struct MarkMarkPosFormat1 if (likely (mark1_index == NOT_COVERED)) return TRACE_RETURN (false); /* now we search backwards for a suitable mark glyph until a non-mark glyph */ - hb_apply_context_t::skipping_iterator_t skippy_iter (c); + hb_apply_context_t::skipping_iterator_t skippy_iter; + skippy_iter.init (c); skippy_iter.reset (buffer->idx, 1); skippy_iter.set_lookup_props (c->lookup_props & ~LookupFlag::IgnoreFlags); if (!skippy_iter.prev ()) return TRACE_RETURN (false); diff --git a/src/hb-ot-layout-gsubgpos-private.hh b/src/hb-ot-layout-gsubgpos-private.hh index 3bdf10c09..254abb6a5 100644 --- a/src/hb-ot-layout-gsubgpos-private.hh +++ b/src/hb-ot-layout-gsubgpos-private.hh @@ -337,23 +337,22 @@ struct hb_apply_context_t struct skipping_iterator_t { - inline skipping_iterator_t (hb_apply_context_t *c_, - bool context_match = false) : - idx (0), - c (c_), - match_glyph_data (NULL), - num_items (0), - end (0) + inline void init (hb_apply_context_t *c_, bool context_match = false) { + c = c_; + match_glyph_data = NULL, + matcher.set_match_func (NULL, NULL); matcher.set_lookup_props (c->lookup_props); /* Ignore ZWNJ if we are matching GSUB context, or matching GPOS. */ matcher.set_ignore_zwnj (context_match || c->table_index == 1); /* Ignore ZWJ if we are matching GSUB context, or matching GPOS, or if asked to. */ matcher.set_ignore_zwj (context_match || c->table_index == 1 || c->auto_zwj); - if (!context_match) - matcher.set_mask (c->lookup_mask); + matcher.set_mask (context_match ? -1 : c->lookup_mask); + } + inline void set_lookup_props (unsigned int lookup_props) + { + matcher.set_lookup_props (lookup_props); } - inline void set_lookup_props (unsigned int lookup_props) { matcher.set_lookup_props (lookup_props); } inline void set_match_func (matcher_t::match_func_t match_func, const void *match_data, const USHORT glyph_data[]) @@ -705,7 +704,8 @@ static inline bool match_input (hb_apply_context_t *c, hb_buffer_t *buffer = c->buffer; - hb_apply_context_t::skipping_iterator_t skippy_iter (c); + hb_apply_context_t::skipping_iterator_t skippy_iter; + skippy_iter.init (c); skippy_iter.reset (buffer->idx, count - 1); skippy_iter.set_match_func (match_func, match_data, input); @@ -874,7 +874,8 @@ static inline bool match_backtrack (hb_apply_context_t *c, { TRACE_APPLY (NULL); - hb_apply_context_t::skipping_iterator_t skippy_iter (c, true); + hb_apply_context_t::skipping_iterator_t skippy_iter; + skippy_iter.init (c, true); skippy_iter.reset (c->buffer->backtrack_len (), count); skippy_iter.set_match_func (match_func, match_data, backtrack); @@ -894,7 +895,8 @@ static inline bool match_lookahead (hb_apply_context_t *c, { TRACE_APPLY (NULL); - hb_apply_context_t::skipping_iterator_t skippy_iter (c, true); + hb_apply_context_t::skipping_iterator_t skippy_iter; + skippy_iter.init (c, true); skippy_iter.reset (c->buffer->idx + offset - 1, count); skippy_iter.set_match_func (match_func, match_data, lookahead); diff --git a/src/hb-ot-shape-fallback.cc b/src/hb-ot-shape-fallback.cc index e399ecd79..d17adf561 100644 --- a/src/hb-ot-shape-fallback.cc +++ b/src/hb-ot-shape-fallback.cc @@ -441,7 +441,8 @@ _hb_ot_shape_fallback_kern (const hb_ot_shape_plan_t *plan, OT::hb_apply_context_t c (1, font, buffer); c.set_lookup_mask (plan->kern_mask); c.set_lookup_props (OT::LookupFlag::IgnoreMarks); - OT::hb_apply_context_t::skipping_iterator_t skippy_iter (&c); + OT::hb_apply_context_t::skipping_iterator_t skippy_iter; + skippy_iter.init (&c); unsigned int count = buffer->len; hb_glyph_info_t *info = buffer->info;