[arrays] Remove need of stride in Supplier<>
authorBehdad Esfahbod <behdad@behdad.org>
Mon, 17 Dec 2018 03:29:40 +0000 (22:29 -0500)
committerBehdad Esfahbod <behdad@behdad.org>
Mon, 17 Dec 2018 03:31:13 +0000 (22:31 -0500)
src/hb-face.cc
src/hb-open-file.hh
src/hb-vector.hh

index a9e0c01..d8b5026 100644 (file)
@@ -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<hb_tag_t>    tags_supplier  (&data->tables[0].tag, table_count, data->tables.item_size);
-  Supplier<hb_blob_t *> blobs_supplier (&data->tables[0].blob, table_count, data->tables.item_size);
+  Supplier<hb_face_builder_data_t::table_entry_t> supplier (data->tables);
   bool ret = f->serialize_single (&c,
                                  sfnt_tag,
-                                 tags_supplier,
-                                 blobs_supplier,
+                                 supplier,
                                  table_count);
 
   c.end_serialize ();
index 6963b08..3847cc3 100644 (file)
@@ -122,10 +122,10 @@ typedef struct OffsetTable
 
   public:
 
+  template <typename item_t>
   bool serialize (hb_serialize_context_t *c,
                  hb_tag_t sfnt_tag,
-                 Supplier<hb_tag_t> &tags,
-                 Supplier<hb_blob_t *> &blobs,
+                 Supplier<item_t> &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 <typename item_t>
   bool serialize_single (hb_serialize_context_t *c,
                         hb_tag_t sfnt_tag,
-                        Supplier<hb_tag_t> &tags,
-                        Supplier<hb_blob_t *> &blobs,
+                        Supplier<item_t> &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
index 6016104..e057fcb 100644 (file)
@@ -122,7 +122,7 @@ struct hb_vector_t
   template <typename T> explicit_operator T * (void) { return arrayZ(); }
   template <typename T> explicit_operator const T * (void) const { return arrayZ(); }
   operator hb_array_t<Type> (void) { return as_array (); }
-  operator hb_array_t<const Type> (void) const { as_array (); }
+  operator hb_array_t<const Type> (void) const { return as_array (); }
 
   Type * operator  + (unsigned int i) { return arrayZ() + i; }
   const Type * operator  + (unsigned int i) const { return arrayZ() + i; }