[subset] use add_array to populate feature_indexes.
This is much faster then calling a bunch of individual add()'s.
This commit is contained in:
parent
7d92bef9c5
commit
89733755a4
@ -190,6 +190,11 @@ struct IndexArray : ArrayOf<Index>
|
||||
}
|
||||
return this->len;
|
||||
}
|
||||
|
||||
inline void add_indexes_to (hb_set_t* output /* OUT */) const
|
||||
{
|
||||
output->add_array (arrayZ, len);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -208,6 +213,8 @@ struct LangSys
|
||||
unsigned int *feature_count /* IN/OUT */,
|
||||
unsigned int *feature_indexes /* OUT */) const
|
||||
{ return featureIndex.get_indexes (start_offset, feature_count, feature_indexes); }
|
||||
inline void add_feature_indexes_to (hb_set_t *feature_indexes) const
|
||||
{ featureIndex.add_indexes_to (feature_indexes); }
|
||||
|
||||
inline bool has_required_feature (void) const { return reqFeatureIndex != 0xFFFFu; }
|
||||
inline unsigned int get_required_feature_index (void) const
|
||||
|
@ -520,6 +520,19 @@ hb_ot_layout_language_get_required_feature (hb_face_t *face,
|
||||
return l.has_required_feature ();
|
||||
}
|
||||
|
||||
static void
|
||||
_hb_ot_layout_language_add_feature_indexes_to (hb_face_t *face,
|
||||
hb_tag_t table_tag,
|
||||
unsigned int script_index,
|
||||
unsigned int language_index,
|
||||
hb_set_t *feature_indexes /* OUT */)
|
||||
{
|
||||
const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
|
||||
const OT::LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
|
||||
l.add_feature_indexes_to (feature_indexes);
|
||||
}
|
||||
|
||||
|
||||
unsigned int
|
||||
hb_ot_layout_language_get_feature_indexes (hb_face_t *face,
|
||||
hb_tag_t table_tag,
|
||||
@ -677,24 +690,11 @@ _hb_ot_layout_collect_features_features (hb_face_t *face,
|
||||
feature_indexes->add (required_feature_index);
|
||||
|
||||
/* All features */
|
||||
unsigned int feature_indices[32];
|
||||
unsigned int offset, len;
|
||||
|
||||
offset = 0;
|
||||
do {
|
||||
len = ARRAY_LENGTH (feature_indices);
|
||||
hb_ot_layout_language_get_feature_indexes (face,
|
||||
table_tag,
|
||||
script_index,
|
||||
language_index,
|
||||
offset, &len,
|
||||
feature_indices);
|
||||
|
||||
for (unsigned int i = 0; i < len; i++)
|
||||
feature_indexes->add (feature_indices[i]);
|
||||
|
||||
offset += len;
|
||||
} while (len == ARRAY_LENGTH (feature_indices));
|
||||
_hb_ot_layout_language_add_feature_indexes_to (face,
|
||||
table_tag,
|
||||
script_index,
|
||||
language_index,
|
||||
feature_indexes);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -763,9 +763,9 @@ _hb_ot_layout_collect_features_languages (hb_face_t *face,
|
||||
}
|
||||
|
||||
/**
|
||||
* hb_ot_layout_collect_lookups:
|
||||
* hb_ot_layout_collect_features:
|
||||
*
|
||||
* Since: 0.9.8
|
||||
* Since: REPLACEME
|
||||
**/
|
||||
void
|
||||
hb_ot_layout_collect_features (hb_face_t *face,
|
||||
|
Loading…
Reference in New Issue
Block a user