diff --git a/src/hb-face.cc b/src/hb-face.cc index a9e0c0173..d8b5026e0 100644 --- a/src/hb-face.cc +++ b/src/hb-face.cc @@ -647,12 +647,10 @@ _hb_face_builder_data_reference_blob (hb_face_builder_data_t *data) bool is_cff = data->tables.lsearch (HB_TAG ('C','F','F',' ')) || data->tables.lsearch (HB_TAG ('C','F','F','2')); hb_tag_t sfnt_tag = is_cff ? OT::OpenTypeFontFile::CFFTag : OT::OpenTypeFontFile::TrueTypeTag; - Supplier tags_supplier (&data->tables[0].tag, table_count, data->tables.item_size); - Supplier blobs_supplier (&data->tables[0].blob, table_count, data->tables.item_size); + Supplier supplier (data->tables); bool ret = f->serialize_single (&c, sfnt_tag, - tags_supplier, - blobs_supplier, + supplier, table_count); c.end_serialize (); diff --git a/src/hb-open-file.hh b/src/hb-open-file.hh index 6963b085a..3847cc3b8 100644 --- a/src/hb-open-file.hh +++ b/src/hb-open-file.hh @@ -122,10 +122,10 @@ typedef struct OffsetTable public: + template bool serialize (hb_serialize_context_t *c, hb_tag_t sfnt_tag, - Supplier &tags, - Supplier &blobs, + Supplier &items, unsigned int table_count) { TRACE_SERIALIZE (this); @@ -144,8 +144,8 @@ typedef struct OffsetTable for (unsigned int i = 0; i < table_count; i++) { TableRecord &rec = tables.arrayZ[i]; - hb_blob_t *blob = blobs[i]; - rec.tag.set (tags[i]); + hb_blob_t *blob = items[i].blob; + rec.tag.set (items[i].tag); rec.length.set (hb_blob_get_length (blob)); rec.offset.serialize (c, this); @@ -159,7 +159,7 @@ typedef struct OffsetTable c->align (4); const char *end = (const char *) c->head; - if (tags[i] == HB_OT_TAG_head && end - start >= head::static_size) + if (items[i].tag == HB_OT_TAG_head && end - start >= head::static_size) { head *h = (head *) start; checksum_adjustment = &h->checkSumAdjustment; @@ -168,8 +168,7 @@ typedef struct OffsetTable rec.checkSum.set_for_data (start, end - start); } - tags += table_count; - blobs += table_count; + items += table_count; tables.qsort (); @@ -489,16 +488,16 @@ struct OpenTypeFontFile } } + template bool serialize_single (hb_serialize_context_t *c, hb_tag_t sfnt_tag, - Supplier &tags, - Supplier &blobs, + Supplier &items, unsigned int table_count) { TRACE_SERIALIZE (this); assert (sfnt_tag != TTCTag); if (unlikely (!c->extend_min (*this))) return_trace (false); - return_trace (u.fontFace.serialize (c, sfnt_tag, tags, blobs, table_count)); + return_trace (u.fontFace.serialize (c, sfnt_tag, items, table_count)); } bool sanitize (hb_sanitize_context_t *c) const diff --git a/src/hb-vector.hh b/src/hb-vector.hh index 60161047e..e057fcb46 100644 --- a/src/hb-vector.hh +++ b/src/hb-vector.hh @@ -122,7 +122,7 @@ struct hb_vector_t template explicit_operator T * (void) { return arrayZ(); } template explicit_operator const T * (void) const { return arrayZ(); } operator hb_array_t (void) { return as_array (); } - operator hb_array_t (void) const { as_array (); } + operator hb_array_t (void) const { return as_array (); } Type * operator + (unsigned int i) { return arrayZ() + i; } const Type * operator + (unsigned int i) const { return arrayZ() + i; }