[dispatch] Use functionality from previous commit

To remove a couple of unwanted wrapper methods
diff --git a/src/hb-dispatch.hh b/src/hb-dispatch.hh
index e582074..0293fd1 100644
--- a/src/hb-dispatch.hh
+++ b/src/hb-dispatch.hh
@@ -47,16 +47,19 @@
   typedef Return return_t;
   template <typename T, typename F>
   bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
-  template <typename T>
-  return_t dispatch (const T &obj) { return _dispatch_impl (obj, hb_prioritize); }
+  template <typename T, typename ...Ts>
+  return_t dispatch (const T &obj, Ts &&...ds)
+  { return _dispatch_impl (obj, hb_prioritize, hb_forward<Ts> (ds)...); }
   static return_t no_dispatch_return_value () { return Context::default_return_value (); }
   static bool stop_sublookup_iteration (const return_t r HB_UNUSED) { return false; }
 
   private:
-  template <typename T>
-  auto _dispatch_impl (const T &obj, hb_priority<1>) HB_AUTO_RETURN (obj.dispatch (thiz ()))
-  template <typename T>
-  Return _dispatch_impl (const T &obj, hb_priority<0>) { return thiz()->_dispatch (obj); }
+  template <typename T, typename ...Ts>
+  auto _dispatch_impl (const T &obj, hb_priority<1>, Ts &&...ds) HB_AUTO_RETURN
+  (obj.dispatch (thiz (), hb_forward<Ts> (ds)...))
+  template <typename T, typename ...Ts>
+  Return _dispatch_impl (const T &obj, hb_priority<0>, Ts &&...ds)
+  { return thiz()->_dispatch (obj, hb_forward<Ts> (ds)...); }
 };
 
 
diff --git a/src/hb-open-type.hh b/src/hb-open-type.hh
index 1deb63a..2990b0d 100644
--- a/src/hb-open-type.hh
+++ b/src/hb-open-type.hh
@@ -295,7 +295,7 @@
 
     s->push ();
 
-    bool ret = src.subset (c, hb_forward<Ts> (ds)...);
+    bool ret = c->dispatch (src, hb_forward<Ts> (ds)...);
 
     if (ret || !has_null)
       s->add_link (*this, s->pop_pack (), base);
@@ -336,7 +336,7 @@
     TRACE_SANITIZE (this);
     return_trace (sanitize_shallow (c, base) &&
 		  (this->is_null () ||
-		   StructAtOffset<Type> (base, *this).sanitize (c, hb_forward<Ts> (ds)...) ||
+		   c->dispatch (StructAtOffset<Type> (base, *this), hb_forward<Ts> (ds)...) ||
 		   neuter (c)));
   }
 
@@ -469,7 +469,7 @@
     TRACE_SANITIZE (this);
     if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
     for (unsigned int i = 0; i < count; i++)
-      if (unlikely (!arrayZ[i].sanitize (c, hb_forward<Ts> (ds)...)))
+      if (unlikely (!c->dispatch (arrayZ[i], hb_forward<Ts> (ds)...)))
 	return_trace (false);
     return_trace (true);
   }
@@ -652,7 +652,7 @@
     if (unlikely (!sanitize_shallow (c))) return_trace (false);
     unsigned int count = len;
     for (unsigned int i = 0; i < count; i++)
-      if (unlikely (!arrayZ[i].sanitize (c, hb_forward<Ts> (ds)...)))
+      if (unlikely (!c->dispatch (arrayZ[i], hb_forward<Ts> (ds)...)))
 	return_trace (false);
     return_trace (true);
   }
@@ -828,7 +828,7 @@
     if (unlikely (!sanitize_shallow (c))) return_trace (false);
     unsigned int count = lenM1 + 1;
     for (unsigned int i = 0; i < count; i++)
-      if (unlikely (!arrayZ[i].sanitize (c, hb_forward<Ts> (ds)...)))
+      if (unlikely (!c->dispatch (arrayZ[i], hb_forward<Ts> (ds)...)))
 	return_trace (false);
     return_trace (true);
   }
diff --git a/src/hb-ot-layout-gpos-table.hh b/src/hb-ot-layout-gpos-table.hh
index 4b752fc..407ce9e 100644
--- a/src/hb-ot-layout-gpos-table.hh
+++ b/src/hb-ot-layout-gpos-table.hh
@@ -1525,12 +1525,6 @@
     }
   }
 
-  /* XXX Remove? */
-  bool subset (hb_subset_context_t *c, unsigned lookup_type) const
-  { return dispatch (c, lookup_type); }
-  bool sanitize (hb_sanitize_context_t *c, unsigned lookup_type) const
-  { return dispatch (c, lookup_type); }
-
   protected:
   union {
   SinglePos		single;
diff --git a/src/hb-ot-layout-gsub-table.hh b/src/hb-ot-layout-gsub-table.hh
index 4a6f48f..be78c1a 100644
--- a/src/hb-ot-layout-gsub-table.hh
+++ b/src/hb-ot-layout-gsub-table.hh
@@ -1170,12 +1170,6 @@
     }
   }
 
-  /* XXX Remove? */
-  bool subset (hb_subset_context_t *c, unsigned lookup_type) const
-  { return dispatch (c, lookup_type); }
-  bool sanitize (hb_sanitize_context_t *c, unsigned lookup_type) const
-  { return dispatch (c, lookup_type); }
-
   protected:
   union {
   SingleSubst			single;
diff --git a/src/hb-sanitize.hh b/src/hb-sanitize.hh
index 9cf17e5..71bf3a8 100644
--- a/src/hb-sanitize.hh
+++ b/src/hb-sanitize.hh
@@ -130,8 +130,9 @@
   template <typename T, typename F>
   bool may_dispatch (const T *obj HB_UNUSED, const F *format)
   { return format->sanitize (this); }
-  template <typename T>
-  return_t _dispatch (const T &obj) { return obj.sanitize (this); }
+  template <typename T, typename ...Ts>
+  return_t _dispatch (const T &obj, Ts &&...ds)
+  { return obj.sanitize (this, hb_forward<Ts> (ds)...); }
   static return_t default_return_value () { return true; }
   static return_t no_dispatch_return_value () { return false; }
   bool stop_sublookup_iteration (const return_t r) const { return !r; }
diff --git a/src/hb-subset.hh b/src/hb-subset.hh
index 795859d..4da2b67 100644
--- a/src/hb-subset.hh
+++ b/src/hb-subset.hh
@@ -40,8 +40,9 @@
        hb_dispatch_context_t<hb_subset_context_t, bool, HB_DEBUG_SUBSET>
 {
   const char *get_name () { return "SUBSET"; }
-  template <typename T>
-  return_t _dispatch (const T &obj) { return obj.subset (this); }
+  template <typename T, typename ...Ts>
+  return_t _dispatch (const T &obj, Ts &&...ds)
+  { return obj.subset (this, hb_forward<Ts> (ds)...); }
   static return_t default_return_value () { return true; }
 
   hb_subset_plan_t *plan;