comment the serialization of table

This commit is contained in:
Rod Sheeter 2018-02-08 19:03:41 -08:00
parent 5a34114f96
commit a19138e668
1 changed files with 8 additions and 0 deletions

View File

@ -133,10 +133,15 @@ typedef struct OffsetTable
unsigned int table_count) unsigned int table_count)
{ {
TRACE_SERIALIZE (this); TRACE_SERIALIZE (this);
// alloc 12 for the OTHeader
if (unlikely (!c->extend_min (*this))) return_trace (false); if (unlikely (!c->extend_min (*this))) return_trace (false);
// write sfntVersion (bytes 0..3)
sfnt_version.set (sfnt_tag); sfnt_version.set (sfnt_tag);
// take space for numTables, searchRange, entrySelector, RangeShift
// and the TableRecords themselves
if (unlikely (!tables.serialize (c, table_count))) return_trace (false); if (unlikely (!tables.serialize (c, table_count))) return_trace (false);
// write OffsetTables, alloc for and write actual table blobs
for (unsigned int i = 0; i < table_count; i++) for (unsigned int i = 0; i < table_count; i++)
{ {
TableRecord &rec = tables.array[i]; TableRecord &rec = tables.array[i];
@ -145,9 +150,12 @@ typedef struct OffsetTable
rec.length.set (hb_blob_get_length (blob)); rec.length.set (hb_blob_get_length (blob));
rec.checkSum.set_for_data (hb_blob_get_data (blob, nullptr), rec.length); rec.checkSum.set_for_data (hb_blob_get_data (blob, nullptr), rec.length);
rec.offset.serialize (c, this); rec.offset.serialize (c, this);
// take room for the tablerec
void *p = c->allocate_size<void> (rec.length); void *p = c->allocate_size<void> (rec.length);
if (unlikely (!p)) {return false;} if (unlikely (!p)) {return false;}
// copy the actual table
memcpy (p, hb_blob_get_data (blob, nullptr), rec.length); memcpy (p, hb_blob_get_data (blob, nullptr), rec.length);
// 4-byte allignment
if (rec.length % 4) if (rec.length % 4)
p = c->allocate_size<void> (4 - rec.length % 4); p = c->allocate_size<void> (4 - rec.length % 4);
} }