From c548fcedc404c03442c042059a71194d97d23bb6 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 2 May 2019 16:29:07 -0700 Subject: [PATCH] [WIP] [name] Port to fancy serializer machinery --- src/hb-ot-name-table.hh | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/hb-ot-name-table.hh b/src/hb-ot-name-table.hh index 00686ee2d..72c0c642c 100644 --- a/src/hb-ot-name-table.hh +++ b/src/hb-ot-name-table.hh @@ -279,17 +279,21 @@ struct name this->format = 0; this->count = name_record_idx_to_retain.length; - this->stringOffset = min_size + name_record_idx_to_retain.length * NameRecord::static_size; + auto snap = c->snapshot (); + this->nameRecordZ.serialize (c, this->count); + this->stringOffset = c->length (); + c->revert (snap); - if (!serialize_name_record (c, source_name, name_record_idx_to_retain)) - return_trace (false); + auto src_array = source_name->nameRecordZ.as_array (source_name->count); + const void *src_base = &(source_name + source_name->stringOffset); + const void *dst_base = &(this + this->stringOffset); - if (!serialize_strings (c, source_name, plan, name_record_idx_to_retain)) - return_trace (false); + + hb_iter (name_record_idx_to_retain) + | hb_apply ([&] (unsigned _) { c->copy (src_array[_], src_base, dst_base); }) + ; - if (!pack_record_and_strings (this, c, name_record_idx_to_retain.length)) - return_trace (false); + assert (this->stringOffset == c->length ()); return_trace (true); }