[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;
|
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_count /* IN/OUT */,
|
||||||
unsigned int *feature_indexes /* OUT */) const
|
unsigned int *feature_indexes /* OUT */) const
|
||||||
{ return featureIndex.get_indexes (start_offset, feature_count, feature_indexes); }
|
{ 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 bool has_required_feature (void) const { return reqFeatureIndex != 0xFFFFu; }
|
||||||
inline unsigned int get_required_feature_index (void) const
|
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 ();
|
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
|
unsigned int
|
||||||
hb_ot_layout_language_get_feature_indexes (hb_face_t *face,
|
hb_ot_layout_language_get_feature_indexes (hb_face_t *face,
|
||||||
hb_tag_t table_tag,
|
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);
|
feature_indexes->add (required_feature_index);
|
||||||
|
|
||||||
/* All features */
|
/* All features */
|
||||||
unsigned int feature_indices[32];
|
_hb_ot_layout_language_add_feature_indexes_to (face,
|
||||||
unsigned int offset, len;
|
table_tag,
|
||||||
|
script_index,
|
||||||
offset = 0;
|
language_index,
|
||||||
do {
|
feature_indexes);
|
||||||
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));
|
|
||||||
}
|
}
|
||||||
else
|
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
|
void
|
||||||
hb_ot_layout_collect_features (hb_face_t *face,
|
hb_ot_layout_collect_features (hb_face_t *face,
|
||||||
|
|
Loading…
Reference in New Issue