Micro-optimize

I know...
This commit is contained in:
Behdad Esfahbod 2012-06-09 01:10:26 -04:00
parent 70416de298
commit ce47613889
2 changed files with 30 additions and 19 deletions

View File

@ -225,7 +225,8 @@ struct hb_apply_context_t
inline bool should_mark_skip_current_glyph (void) const 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);
} }

View File

@ -107,9 +107,31 @@ _hb_ot_layout_get_glyph_property (hb_face_t *face,
return info->props_cache(); 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_ot_layout_match_properties (hb_face_t *face,
hb_codepoint_t codepoint, hb_codepoint_t glyph,
unsigned int glyph_props, unsigned int glyph_props,
unsigned int lookup_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) if (glyph_props & lookup_props & LookupFlag::IgnoreFlags)
return false; return false;
if (glyph_props & HB_OT_LAYOUT_GLYPH_CLASS_MARK) if (unlikely (glyph_props & HB_OT_LAYOUT_GLYPH_CLASS_MARK))
{ return _hb_ot_layout_match_properties_mark (face, glyph, glyph_props, 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, 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);
}
return true; return true;
} }
@ -161,7 +170,8 @@ _hb_ot_layout_skip_mark (hb_face_t *face,
unsigned int property; unsigned int property;
property = _hb_ot_layout_get_glyph_property (face, ginfo); 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 it's a mark, skip it we don't accept it. */
if (unlikely (property & HB_OT_LAYOUT_GLYPH_CLASS_MARK)) if (unlikely (property & HB_OT_LAYOUT_GLYPH_CLASS_MARK))