[glyf] Use common convention of other tables access, format
diff --git a/src/hb-ot-face-table-list.hh b/src/hb-ot-face-table-list.hh
index 30bab5c..6fa9baf 100644
--- a/src/hb-ot-face-table-list.hh
+++ b/src/hb-ot-face-table-list.hh
@@ -84,6 +84,7 @@
 #ifndef HB_NO_VAR
 HB_OT_TABLE (OT, fvar)
 HB_OT_TABLE (OT, avar)
+HB_OT_ACCELERATOR (OT, gvar)
 HB_OT_TABLE (OT, MVAR)
 #endif
 
diff --git a/src/hb-ot-glyf-table.hh b/src/hb-ot-glyf-table.hh
index a3d1f8c..0855d86 100644
--- a/src/hb-ot-glyf-table.hh
+++ b/src/hb-ot-glyf-table.hh
@@ -487,10 +487,13 @@
 
   struct accelerator_t
   {
-    void init (hb_face_t *face)
+    void init (hb_face_t *face_)
     {
-      memset (this, 0, sizeof (accelerator_t));
-
+      short_offset = false;
+      num_glyphs = 0;
+      loca_table = nullptr;
+      glyf_table = nullptr;
+      face = face_;
       const OT::head &head = *face->table.head;
       if (head.indexToLocFormat > 1 || head.glyphDataFormat != 0)
 	/* Unknown format.  Leave num_glyphs=0, that takes care of disabling us. */
@@ -501,19 +504,12 @@
       glyf_table = hb_sanitize_context_t ().reference_table<glyf> (face);
 
       num_glyphs = hb_max (1u, loca_table.get_length () / (short_offset ? 2 : 4)) - 1;
-
-      gvar_accel.init (face);
-      hmtx_accel.init (face);
-      vmtx_accel.init (face);
     }
 
     void fini ()
     {
       loca_table.destroy ();
       glyf_table.destroy ();
-      gvar_accel.fini ();
-      hmtx_accel.fini ();
-      vmtx_accel.fini ();
     }
 
     /*
@@ -616,10 +612,10 @@
     void init_phantom_points (hb_codepoint_t glyph, hb_array_t<contour_point_t> &phantoms /* IN/OUT */) const
     {
       const GlyphHeader &header = get_header (glyph);
-      int h_delta = (int) header.xMin - hmtx_accel.get_side_bearing (glyph);
-      int v_orig  = (int) header.yMax + vmtx_accel.get_side_bearing (glyph);
-      unsigned int h_adv = hmtx_accel.get_advance (glyph);
-      unsigned int v_adv = vmtx_accel.get_advance (glyph);
+      int h_delta = (int) header.xMin - face->table.hmtx->get_side_bearing (glyph);
+      int v_orig  = (int) header.yMax + face->table.vmtx->get_side_bearing (glyph);
+      unsigned int h_adv = face->table.hmtx->get_advance (glyph);
+      unsigned int v_adv = face->table.vmtx->get_advance (glyph);
 
       phantoms[PHANTOM_LEFT].x = h_delta;
       phantoms[PHANTOM_RIGHT].x = h_adv + h_delta;
@@ -742,9 +738,9 @@
       contour_point_vector_t points;
       hb_vector_t<unsigned int> end_points;
       if (unlikely (!get_contour_points (glyph, points, end_points))) return false;
-      hb_array_t<contour_point_t>	phantoms = points.sub_array (points.length-PHANTOM_COUNT, PHANTOM_COUNT);
+      hb_array_t<contour_point_t> phantoms = points.sub_array (points.length - PHANTOM_COUNT, PHANTOM_COUNT);
       init_phantom_points (glyph, phantoms);
-      if (unlikely (!gvar_accel.apply_deltas_to_points (glyph, coords, coord_count, points.as_array (), end_points.as_array ()))) return false;
+      if (unlikely (!face->table.gvar->apply_deltas_to_points (glyph, coords, coord_count, points.as_array (), end_points.as_array ()))) return false;
 
       unsigned int comp_index = 0;
       CompositeGlyphHeader::Iterator composite;
@@ -1003,7 +999,7 @@
 	unsigned int instruction_len_offset = glyph_header.simple_instruction_len_offset ();
 	if (unlikely (instruction_len_offset + 2 > glyph.length))
 	{
-	  DEBUG_MSG(SUBSET, nullptr, "Glyph size is too short, missing field instructionLength.");
+	  DEBUG_MSG (SUBSET, nullptr, "Glyph size is too short, missing field instructionLength.");
 	  return false;
 	}
 
@@ -1011,7 +1007,7 @@
 	/* Out of bounds of the current glyph */
 	if (unlikely (glyph_header.simple_length (instruction_len) > glyph.length))
 	{
-	  DEBUG_MSG(SUBSET, nullptr, "The instructions array overruns the glyph's boundaries.");
+	  DEBUG_MSG (SUBSET, nullptr, "The instructions array overruns the glyph's boundaries.");
 	  return false;
 	}
 	*length = (uint16_t) instruction_len;
@@ -1027,11 +1023,11 @@
       contour_point_vector_t phantoms;
       phantoms.resize (PHANTOM_COUNT);
 
-      if (likely (coord_count == gvar_accel.get_axis_count ()))
+      if (likely (coord_count == face->table.gvar->get_axis_count ()))
 	success = get_var_metrics (glyph, coords, coord_count, phantoms);
 
       if (unlikely (!success))
-	return vertical ? vmtx_accel.get_advance (glyph) : hmtx_accel.get_advance (glyph);
+	return vertical ? face->table.vmtx->get_advance (glyph) : face->table.hmtx->get_advance (glyph);
 
       if (vertical)
 	return roundf (phantoms[PHANTOM_TOP].y - phantoms[PHANTOM_BOTTOM].y);
@@ -1046,16 +1042,16 @@
       phantoms.resize (PHANTOM_COUNT);
 
       if (unlikely (!get_var_extents_and_phantoms (glyph, coords, coord_count, &extents, &phantoms)))
-	return vertical ? vmtx_accel.get_side_bearing (glyph) : hmtx_accel.get_side_bearing (glyph);
+	return vertical ? face->table.vmtx->get_side_bearing (glyph) : face->table.hmtx->get_side_bearing (glyph);
 
-      return vertical ? (int) ceil (phantoms[PHANTOM_TOP].y) - extents.y_bearing : (int)floorf (phantoms[PHANTOM_LEFT].x);
+      return vertical ? ceil (phantoms[PHANTOM_TOP].y) - extents.y_bearing : floor (phantoms[PHANTOM_LEFT].x);
     }
 
     bool get_extents (hb_font_t *font, hb_codepoint_t glyph, hb_glyph_extents_t *extents) const
     {
       unsigned int coord_count;
       const int *coords = hb_font_get_var_coords_normalized (font, &coord_count);
-      if (coords && coord_count > 0 && coord_count == gvar_accel.get_axis_count ())
+      if (coords && coord_count > 0 && coord_count == face->table.gvar->get_axis_count ())
 	return get_extents_var (glyph, coords, coord_count, extents);
 
       unsigned int start_offset, end_offset;
@@ -1069,7 +1065,7 @@
 
       /* Undocumented rasterizer behavior: shift glyph to the left by (lsb - xMin), i.e., xMin = lsb */
       /* extents->x_bearing = hb_min (glyph_header.xMin, glyph_header.xMax); */
-      extents->x_bearing = hmtx_accel.get_side_bearing (glyph);
+      extents->x_bearing = face->table.hmtx->get_side_bearing (glyph);
       extents->y_bearing = hb_max (glyph_header.yMin, glyph_header.yMax);
       extents->width     = hb_max (glyph_header.xMin, glyph_header.xMax) - hb_min (glyph_header.xMin, glyph_header.xMax);
       extents->height    = hb_min (glyph_header.yMin, glyph_header.yMax) - extents->y_bearing;
@@ -1077,19 +1073,19 @@
       return true;
     }
 
-    hb_bytes_t bytes_for_glyph (const char * glyf, hb_codepoint_t gid)
+    hb_bytes_t bytes_for_glyph (const char *glyf, hb_codepoint_t gid)
     {
       unsigned int start_offset, end_offset;
       if (unlikely (!(get_offsets (gid, &start_offset, &end_offset) &&
-	 remove_padding (start_offset, &end_offset))))
+		      remove_padding (start_offset, &end_offset))))
       {
-	DEBUG_MSG(SUBSET, nullptr, "Unable to get offset or remove padding for %d", gid);
+	DEBUG_MSG (SUBSET, nullptr, "Unable to get offset or remove padding for %d", gid);
 	return hb_bytes_t ();
       }
       hb_bytes_t glyph_bytes = hb_bytes_t (glyf + start_offset, end_offset - start_offset);
       if (!glyph_bytes.as<GlyphHeader> ()->has_data ())
       {
-	DEBUG_MSG(SUBSET, nullptr, "Glyph size smaller than minimum header %d", gid);
+	DEBUG_MSG (SUBSET, nullptr, "Glyph size smaller than minimum header %d", gid);
 	return hb_bytes_t ();
       }
       return glyph_bytes;
@@ -1100,11 +1096,7 @@
     unsigned int num_glyphs;
     hb_blob_ptr_t<loca> loca_table;
     hb_blob_ptr_t<glyf> glyf_table;
-
-    /* variable font support */
-    gvar::accelerator_t gvar_accel;
-    hmtx::accelerator_t hmtx_accel;
-    vmtx::accelerator_t vmtx_accel;
+    hb_face_t *face;
   };
 
 
@@ -1116,22 +1108,21 @@
     hb_bytes_t dest_start;  /* region of source_glyph to copy first */
     hb_bytes_t dest_end;    /* region of source_glyph to copy second */
 
-
     bool serialize (hb_serialize_context_t *c,
 		    const hb_subset_plan_t *plan) const
     {
       TRACE_SERIALIZE (this);
 
       hb_bytes_t dest_glyph = dest_start.copy (c);
-      dest_glyph = hb_bytes_t (&dest_glyph, dest_glyph.length + dest_end.copy(c).length);
+      dest_glyph = hb_bytes_t (&dest_glyph, dest_glyph.length + dest_end.copy (c).length);
       unsigned int pad_length = padding ();
-      DEBUG_MSG(SUBSET, nullptr, "serialize %d byte glyph, width %d pad %d", dest_glyph.length, dest_glyph.length  + pad_length, pad_length);
+      DEBUG_MSG (SUBSET, nullptr, "serialize %d byte glyph, width %d pad %d", dest_glyph.length, dest_glyph.length  + pad_length, pad_length);
 
       HBUINT8 pad;
       pad = 0;
       while (pad_length > 0)
       {
-	c->embed(pad);
+	c->embed (pad);
 	pad_length--;
       }