From ce47613889aa3ff9b0067d3e51ba63cfdb139adb Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Sat, 9 Jun 2012 01:10:26 -0400 Subject: [PATCH] Micro-optimize I know... --- src/hb-ot-layout-gsubgpos-private.hh | 3 +- src/hb-ot-layout.cc | 46 +++++++++++++++++----------- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/hb-ot-layout-gsubgpos-private.hh b/src/hb-ot-layout-gsubgpos-private.hh index 4cf615090..fee026a83 100644 --- a/src/hb-ot-layout-gsubgpos-private.hh +++ b/src/hb-ot-layout-gsubgpos-private.hh @@ -225,7 +225,8 @@ struct hb_apply_context_t inline bool should_mark_skip_current_glyph (void) const { - return _hb_ot_layout_skip_mark (face, &buffer->cur(), lookup_props, NULL); + unsigned int property; + return _hb_ot_layout_skip_mark (face, &buffer->cur(), lookup_props, &property); } diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index da65cda85..86550ca9c 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc @@ -107,9 +107,31 @@ _hb_ot_layout_get_glyph_property (hb_face_t *face, return info->props_cache(); } -static hb_bool_t +static inline hb_bool_t +_hb_ot_layout_match_properties_mark (hb_face_t *face, + hb_codepoint_t glyph, + unsigned int glyph_props, + unsigned int lookup_props) +{ + /* If using mark filtering sets, the high short of + * lookup_props has the set index. + */ + if (lookup_props & LookupFlag::UseMarkFilteringSet) + return _get_gdef (face).mark_set_covers (lookup_props >> 16, glyph); + + /* The second byte of lookup_props has the meaning + * "ignore marks of attachment type different than + * the attachment type specified." + */ + if (lookup_props & LookupFlag::MarkAttachmentType && glyph_props & LookupFlag::MarkAttachmentType) + return (lookup_props & LookupFlag::MarkAttachmentType) == (glyph_props & LookupFlag::MarkAttachmentType); + + return true; +} + +static inline hb_bool_t _hb_ot_layout_match_properties (hb_face_t *face, - hb_codepoint_t codepoint, + hb_codepoint_t glyph, unsigned int glyph_props, unsigned int lookup_props) { @@ -119,21 +141,8 @@ _hb_ot_layout_match_properties (hb_face_t *face, if (glyph_props & lookup_props & LookupFlag::IgnoreFlags) return false; - if (glyph_props & HB_OT_LAYOUT_GLYPH_CLASS_MARK) - { - /* If using mark filtering sets, the high short of - * lookup_props has the set index. - */ - if (lookup_props & LookupFlag::UseMarkFilteringSet) - return _get_gdef (face).mark_set_covers (lookup_props >> 16, codepoint); - - /* The second byte of lookup_props has the meaning - * "ignore marks of attachment type different than - * the attachment type specified." - */ - if (lookup_props & LookupFlag::MarkAttachmentType && glyph_props & LookupFlag::MarkAttachmentType) - return (lookup_props & LookupFlag::MarkAttachmentType) == (glyph_props & LookupFlag::MarkAttachmentType); - } + if (unlikely (glyph_props & HB_OT_LAYOUT_GLYPH_CLASS_MARK)) + return _hb_ot_layout_match_properties_mark (face, glyph, glyph_props, lookup_props); return true; } @@ -161,7 +170,8 @@ _hb_ot_layout_skip_mark (hb_face_t *face, unsigned int property; property = _hb_ot_layout_get_glyph_property (face, ginfo); - (void) (property_out && (*property_out = property)); + if (property_out) + *property_out = property; /* If it's a mark, skip it we don't accept it. */ if (unlikely (property & HB_OT_LAYOUT_GLYPH_CLASS_MARK))