Templatize GSUBGPOS::sanitize()
authorBehdad Esfahbod <behdad@behdad.org>
Mon, 3 Sep 2018 23:41:28 +0000 (16:41 -0700)
committerBehdad Esfahbod <behdad@behdad.org>
Mon, 3 Sep 2018 23:41:28 +0000 (16:41 -0700)
src/hb-ot-layout-gpos-table.hh
src/hb-ot-layout-gsub-table.hh
src/hb-ot-layout-gsubgpos.hh

index 641d16d..f088061 100644 (file)
@@ -1548,8 +1548,6 @@ struct PosLookup : Lookup
   }
 };
 
-typedef OffsetListOf<PosLookup> PosLookupList;
-
 /*
  * GPOS -- Glyph Positioning
  * https://docs.microsoft.com/en-us/typography/opentype/spec/gpos
@@ -1569,9 +1567,7 @@ struct GPOS : GSUBGPOS
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (unlikely (!GSUBGPOS::sanitize (c))) return_trace (false);
-    const OffsetTo<PosLookupList> &list = CastR<OffsetTo<PosLookupList> > (lookupList);
-    return_trace (list.sanitize (c, this));
+    return_trace (GSUBGPOS::sanitize<PosLookup> (c));
   }
 
   typedef GSUBGPOS::accelerator_t<GPOS> accelerator_t;
index 5b913c7..31e3c2f 100644 (file)
@@ -1385,8 +1385,6 @@ struct SubstLookup : Lookup
   }
 };
 
-typedef OffsetListOf<SubstLookup> SubstLookupList;
-
 /*
  * GSUB -- Glyph Substitution
  * https://docs.microsoft.com/en-us/typography/opentype/spec/gsub
@@ -1402,11 +1400,11 @@ struct GSUB : GSUBGPOS
   inline bool subset (hb_subset_context_t *c) const
   {
     TRACE_SUBSET (this);
-    struct GSUB *out = c->serializer->start_embed<GSUB> ();
+    //struct GSUB *out = c->serializer->start_embed<GSUB> ();
     if (unlikely (!GSUBGPOS::subset (c))) return_trace (false);
-    const OffsetTo<SubstLookupList> &list = CastR<const OffsetTo<SubstLookupList> > (lookupList);
-    OffsetTo<SubstLookupList> &outList = CastR<OffsetTo<SubstLookupList> > (out->lookupList);
-    outList.set (0);
+    //const OffsetTo<SubstLookupList> &list = CastR<const OffsetTo<SubstLookupList> > (lookupList);
+    //OffsetTo<SubstLookupList> &outList = CastR<OffsetTo<SubstLookupList> > (out->lookupList);
+    //outList.set (0);
     //outList.serialize_subset (c, this+list, out);
     /* TODO Use intersects() to count how many subtables survive? */
     return_trace (true);
@@ -1415,9 +1413,7 @@ struct GSUB : GSUBGPOS
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (unlikely (!GSUBGPOS::sanitize (c))) return_trace (false);
-    const OffsetTo<SubstLookupList> &list = CastR<OffsetTo<SubstLookupList> > (lookupList);
-    return_trace (list.sanitize (c, this));
+    return_trace (GSUBGPOS::sanitize<SubstLookup> (c));
   }
 
   typedef GSUBGPOS::accelerator_t<GSUB> accelerator_t;
index 6b163dc..e32bbd5 100644 (file)
@@ -2565,14 +2565,16 @@ struct GSUBGPOS
           (version.to_int () >= 0x00010001u ? featureVars.static_size : 0);
   }
 
+  template <typename TLookup>
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
+    typedef OffsetListOf<TLookup> TLookupList;
     return_trace (version.sanitize (c) &&
                  likely (version.major == 1) &&
                  scriptList.sanitize (c, this) &&
                  featureList.sanitize (c, this) &&
-                 lookupList.sanitize (c, this) &&
+                 CastR<OffsetTo<TLookupList> > (lookupList).sanitize (c, this) &&
                  (version.to_int () < 0x00010001u || featureVars.sanitize (c, this)));
   }