diff --git a/src/hb-dispatch.hh b/src/hb-dispatch.hh index e5820744e..0293fd14e 100644 --- a/src/hb-dispatch.hh +++ b/src/hb-dispatch.hh @@ -47,16 +47,19 @@ struct hb_dispatch_context_t typedef Return return_t; template bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; } - template - return_t dispatch (const T &obj) { return _dispatch_impl (obj, hb_prioritize); } + template + return_t dispatch (const T &obj, Ts &&...ds) + { return _dispatch_impl (obj, hb_prioritize, hb_forward (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 - auto _dispatch_impl (const T &obj, hb_priority<1>) HB_AUTO_RETURN (obj.dispatch (thiz ())) - template - Return _dispatch_impl (const T &obj, hb_priority<0>) { return thiz()->_dispatch (obj); } + template + auto _dispatch_impl (const T &obj, hb_priority<1>, Ts &&...ds) HB_AUTO_RETURN + (obj.dispatch (thiz (), hb_forward (ds)...)) + template + Return _dispatch_impl (const T &obj, hb_priority<0>, Ts &&...ds) + { return thiz()->_dispatch (obj, hb_forward (ds)...); } }; diff --git a/src/hb-open-type.hh b/src/hb-open-type.hh index 1deb63a35..2990b0d58 100644 --- a/src/hb-open-type.hh +++ b/src/hb-open-type.hh @@ -295,7 +295,7 @@ struct OffsetTo : Offset s->push (); - bool ret = src.subset (c, hb_forward (ds)...); + bool ret = c->dispatch (src, hb_forward (ds)...); if (ret || !has_null) s->add_link (*this, s->pop_pack (), base); @@ -336,7 +336,7 @@ struct OffsetTo : Offset TRACE_SANITIZE (this); return_trace (sanitize_shallow (c, base) && (this->is_null () || - StructAtOffset (base, *this).sanitize (c, hb_forward (ds)...) || + c->dispatch (StructAtOffset (base, *this), hb_forward (ds)...) || neuter (c))); } @@ -469,7 +469,7 @@ struct UnsizedArrayOf 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 (ds)...))) + if (unlikely (!c->dispatch (arrayZ[i], hb_forward (ds)...))) return_trace (false); return_trace (true); } @@ -652,7 +652,7 @@ struct ArrayOf 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 (ds)...))) + if (unlikely (!c->dispatch (arrayZ[i], hb_forward (ds)...))) return_trace (false); return_trace (true); } @@ -828,7 +828,7 @@ struct ArrayOfM1 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 (ds)...))) + if (unlikely (!c->dispatch (arrayZ[i], hb_forward (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 4b752fc11..407ce9e27 100644 --- a/src/hb-ot-layout-gpos-table.hh +++ b/src/hb-ot-layout-gpos-table.hh @@ -1525,12 +1525,6 @@ struct PosLookupSubTable } } - /* 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 4a6f48f91..be78c1aaa 100644 --- a/src/hb-ot-layout-gsub-table.hh +++ b/src/hb-ot-layout-gsub-table.hh @@ -1170,12 +1170,6 @@ struct SubstLookupSubTable } } - /* 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 9cf17e5f4..71bf3a859 100644 --- a/src/hb-sanitize.hh +++ b/src/hb-sanitize.hh @@ -130,8 +130,9 @@ struct hb_sanitize_context_t : template bool may_dispatch (const T *obj HB_UNUSED, const F *format) { return format->sanitize (this); } - template - return_t _dispatch (const T &obj) { return obj.sanitize (this); } + template + return_t _dispatch (const T &obj, Ts &&...ds) + { return obj.sanitize (this, hb_forward (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 795859dd1..4da2b675b 100644 --- a/src/hb-subset.hh +++ b/src/hb-subset.hh @@ -40,8 +40,9 @@ struct hb_subset_context_t : hb_dispatch_context_t { const char *get_name () { return "SUBSET"; } - template - return_t _dispatch (const T &obj) { return obj.subset (this); } + template + return_t _dispatch (const T &obj, Ts &&...ds) + { return obj.subset (this, hb_forward (ds)...); } static return_t default_return_value () { return true; } hb_subset_plan_t *plan;