[WIP] [name] Port to fancy serializer machinery
authorBehdad Esfahbod <behdad@behdad.org>
Thu, 2 May 2019 23:29:07 +0000 (16:29 -0700)
committerBehdad Esfahbod <behdad@behdad.org>
Fri, 3 May 2019 04:04:31 +0000 (21:04 -0700)
src/hb-ot-name-table.hh

index 00686ee..72c0c64 100644 (file)
@@ -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);
   }