[subset-accelerator] Cache gid-to-unicodes
This commit is contained in:
parent
10c8fc5553
commit
7d6893a803
|
@ -31,6 +31,7 @@
|
|||
#include "hb.hh"
|
||||
|
||||
#include "hb-map.hh"
|
||||
#include "hb-multimap.hh"
|
||||
#include "hb-set.hh"
|
||||
|
||||
extern HB_INTERNAL hb_user_data_key_t _hb_subset_accelerator_user_data_key;
|
||||
|
@ -51,11 +52,12 @@ struct hb_subset_accelerator_t
|
|||
}
|
||||
|
||||
static hb_subset_accelerator_t* create(const hb_map_t& unicode_to_gid_,
|
||||
const hb_multimap_t gid_to_unicodes_,
|
||||
const hb_set_t& unicodes_,
|
||||
bool has_seac_) {
|
||||
hb_subset_accelerator_t* accel =
|
||||
(hb_subset_accelerator_t*) hb_malloc (sizeof(hb_subset_accelerator_t));
|
||||
new (accel) hb_subset_accelerator_t (unicode_to_gid_, unicodes_);
|
||||
new (accel) hb_subset_accelerator_t (unicode_to_gid_, gid_to_unicodes_, unicodes_);
|
||||
accel->has_seac = has_seac_;
|
||||
return accel;
|
||||
}
|
||||
|
@ -76,8 +78,9 @@ struct hb_subset_accelerator_t
|
|||
}
|
||||
|
||||
hb_subset_accelerator_t (const hb_map_t& unicode_to_gid_,
|
||||
const hb_multimap_t& gid_to_unicodes_,
|
||||
const hb_set_t& unicodes_)
|
||||
: unicode_to_gid(unicode_to_gid_), unicodes(unicodes_),
|
||||
: unicode_to_gid(unicode_to_gid_), gid_to_unicodes (gid_to_unicodes_), unicodes(unicodes_),
|
||||
cmap_cache(nullptr), destroy_cmap_cache(nullptr),
|
||||
has_seac(false), cff_accelerator(nullptr), destroy_cff_accelerator(nullptr)
|
||||
{ sanitized_table_cache_lock.init (); }
|
||||
|
@ -91,6 +94,7 @@ struct hb_subset_accelerator_t
|
|||
mutable hb_hashmap_t<hb_tag_t, hb::unique_ptr<hb_blob_t>> sanitized_table_cache;
|
||||
|
||||
const hb_map_t unicode_to_gid;
|
||||
const hb_multimap_t gid_to_unicodes;
|
||||
const hb_set_t unicodes;
|
||||
|
||||
// cmap
|
||||
|
@ -106,7 +110,10 @@ struct hb_subset_accelerator_t
|
|||
|
||||
bool in_error () const
|
||||
{
|
||||
return unicode_to_gid.in_error() || unicodes.in_error () || sanitized_table_cache.in_error ();
|
||||
return unicode_to_gid.in_error () ||
|
||||
gid_to_unicodes.in_error () ||
|
||||
unicodes.in_error () ||
|
||||
sanitized_table_cache.in_error ();
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include "hb-subset-plan.hh"
|
||||
#include "hb-subset-accelerator.hh"
|
||||
#include "hb-map.hh"
|
||||
#include "hb-multimap.hh"
|
||||
#include "hb-set.hh"
|
||||
|
||||
#include "hb-ot-cmap-table.hh"
|
||||
|
@ -930,8 +931,19 @@ hb_subset_plan_create_or_fail (hb_face_t *face,
|
|||
|
||||
if (plan->attach_accelerator_data)
|
||||
{
|
||||
hb_multimap_t gid_to_unicodes;
|
||||
|
||||
hb_map_t &unicode_to_gid = *plan->codepoint_to_glyph;
|
||||
|
||||
for (auto unicode : *plan->unicodes)
|
||||
{
|
||||
auto gid = unicode_to_gid[unicode];
|
||||
gid_to_unicodes.add (gid, unicode);
|
||||
}
|
||||
|
||||
plan->inprogress_accelerator =
|
||||
hb_subset_accelerator_t::create (*plan->codepoint_to_glyph,
|
||||
gid_to_unicodes,
|
||||
*plan->unicodes,
|
||||
plan->has_seac);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue