From 7c037bd2be2e794dfd882b806f684ad74c56dbb8 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 7 May 2019 13:37:43 -0700 Subject: [PATCH] [name] Clean up some more --- src/hb-meta.hh | 2 ++ src/hb-ot-name-table.hh | 30 ++++++++++++++---------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/hb-meta.hh b/src/hb-meta.hh index e8002f2..f2134d6 100644 --- a/src/hb-meta.hh +++ b/src/hb-meta.hh @@ -163,6 +163,8 @@ struct hb_reference_wrapper template struct hb_enable_if {}; template struct hb_enable_if { typedef T type; }; #define hb_enable_if(Cond) typename hb_enable_if<(Cond)>::type* = nullptr +/* Concepts/Requires alias: */ +#define hb_requires(Cond) hb_enable_if((Cond)) template struct hb_is_same : hb_false_t {}; template struct hb_is_same : hb_true_t {}; diff --git a/src/hb-ot-name-table.hh b/src/hb-ot-name-table.hh index 6a4ac09..4e4da74 100644 --- a/src/hb-ot-name-table.hh +++ b/src/hb-ot-name-table.hh @@ -169,21 +169,16 @@ struct name unsigned int get_size () const { return min_size + count * nameRecordZ.item_size; } + template bool serialize (hb_serialize_context_t *c, - const name *source_name, - const hb_set_t *name_ids) + Iterator it, + const void *src_string_pool) { TRACE_SERIALIZE (this); if (unlikely (!c->extend_min ((*this)))) return_trace (false); - auto src_array = source_name->nameRecordZ.as_array (source_name->count); - - auto it = - + src_array - | hb_filter (name_ids, &NameRecord::nameID) - ; - this->format = 0; this->count = it.len (); @@ -192,11 +187,10 @@ struct name this->stringOffset = c->length (); c->revert (snap); - const void *src_base = &(source_name + source_name->stringOffset); - const void *dst_base = &(this + this->stringOffset); + const void *dst_string_pool = &(this + this->stringOffset); + it - | hb_apply ([&] (const NameRecord& _) { c->copy (_, src_base, dst_base); }) + | hb_apply ([&] (const NameRecord& _) { c->copy (_, src_string_pool, dst_string_pool); }) ; if (unlikely (c->ran_out_of_room)) return_trace (false); @@ -209,12 +203,16 @@ struct name bool subset (hb_subset_context_t *c) const { TRACE_SUBSET (this); - hb_subset_plan_t *plan = c->plan; - hb_serialize_context_t *serializer = c->serializer; - name *name_prime = serializer->start_embed (); + name *name_prime = c->serializer->start_embed (); if (unlikely (!name_prime)) return_trace (false); - name_prime->serialize (serializer, this, plan->name_ids); + + auto it = + + nameRecordZ.as_array (count) + | hb_filter (c->plan->name_ids, &NameRecord::nameID) + ; + + name_prime->serialize (c->serializer, it, hb_addressof (this + stringOffset)); return_trace (name_prime->count); } -- 2.7.4