From: Behdad Esfahbod Date: Sun, 5 May 2019 16:54:58 +0000 (-0700) Subject: Fix previous commit X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c14efb8e68e31fb7537bcfe5eea779c0830a0b0c;p=platform%2Fupstream%2FlibHarfBuzzSharp.git Fix previous commit Priority should be given to specific over dispatch. Broke sanitize before. This fixes it, by moving prioritization to the context implementation, since the correct priority cannot be done in the dispatch implementation. Done for subset and sanitize only, which need it. --- diff --git a/src/hb-aat-layout-common.hh b/src/hb-aat-layout-common.hh index a17da37..95ac271 100644 --- a/src/hb-aat-layout-common.hh +++ b/src/hb-aat-layout-common.hh @@ -807,7 +807,7 @@ struct hb_aat_apply_context_t : { const char *get_name () { return "APPLY"; } template - return_t _dispatch (const T &obj) { return obj.apply (this); } + return_t dispatch (const T &obj) { return obj.apply (this); } static return_t default_return_value () { return false; } bool stop_sublookup_iteration (return_t r) const { return r; } diff --git a/src/hb-dispatch.hh b/src/hb-dispatch.hh index 0293fd1..6b49782 100644 --- a/src/hb-dispatch.hh +++ b/src/hb-dispatch.hh @@ -49,17 +49,9 @@ struct hb_dispatch_context_t bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; } template return_t dispatch (const T &obj, Ts &&...ds) - { return _dispatch_impl (obj, hb_prioritize, hb_forward (ds)...); } + { return obj.dispatch (thiz (), 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>, 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-ot-layout-gsubgpos.hh b/src/hb-ot-layout-gsubgpos.hh index 9960b40..6b0b7ad 100644 --- a/src/hb-ot-layout-gsubgpos.hh +++ b/src/hb-ot-layout-gsubgpos.hh @@ -46,7 +46,7 @@ struct hb_intersects_context_t : { const char *get_name () { return "INTERSECTS"; } template - return_t _dispatch (const T &obj) { return obj.intersects (this->glyphs); } + return_t dispatch (const T &obj) { return obj.intersects (this->glyphs); } static return_t default_return_value () { return false; } bool stop_sublookup_iteration (return_t r) const { return r; } @@ -64,7 +64,7 @@ struct hb_closure_context_t : const char *get_name () { return "CLOSURE"; } typedef return_t (*recurse_func_t) (hb_closure_context_t *c, unsigned int lookup_index); template - return_t _dispatch (const T &obj) { obj.closure (this); return hb_void_t (); } + return_t dispatch (const T &obj) { obj.closure (this); return hb_void_t (); } static return_t default_return_value () { return hb_void_t (); } void recurse (unsigned int lookup_index) { @@ -128,7 +128,7 @@ struct hb_would_apply_context_t : { const char *get_name () { return "WOULD_APPLY"; } template - return_t _dispatch (const T &obj) { return obj.would_apply (this); } + return_t dispatch (const T &obj) { return obj.would_apply (this); } static return_t default_return_value () { return false; } bool stop_sublookup_iteration (return_t r) const { return r; } @@ -156,7 +156,7 @@ struct hb_collect_glyphs_context_t : const char *get_name () { return "COLLECT_GLYPHS"; } typedef return_t (*recurse_func_t) (hb_collect_glyphs_context_t *c, unsigned int lookup_index); template - return_t _dispatch (const T &obj) { obj.collect_glyphs (this); return hb_void_t (); } + return_t dispatch (const T &obj) { obj.collect_glyphs (this); return hb_void_t (); } static return_t default_return_value () { return hb_void_t (); } void recurse (unsigned int lookup_index) { @@ -235,7 +235,7 @@ struct hb_add_coverage_context_t : const char *get_name () { return "GET_COVERAGE"; } typedef const Coverage &return_t; template - return_t _dispatch (const T &obj) { return obj.get_coverage (); } + return_t dispatch (const T &obj) { return obj.get_coverage (); } static return_t default_return_value () { return Null(Coverage); } bool stop_sublookup_iteration (return_t r) const { @@ -438,7 +438,7 @@ struct hb_ot_apply_context_t : const char *get_name () { return "APPLY"; } typedef return_t (*recurse_func_t) (hb_ot_apply_context_t *c, unsigned int lookup_index); template - return_t _dispatch (const T &obj) { return obj.apply (this); } + return_t dispatch (const T &obj) { return obj.apply (this); } static return_t default_return_value () { return false; } bool stop_sublookup_iteration (return_t r) const { return r; } return_t recurse (unsigned int sub_lookup_index) @@ -648,7 +648,7 @@ struct hb_get_subtables_context_t : /* Dispatch interface. */ const char *get_name () { return "GET_SUBTABLES"; } template - return_t _dispatch (const T &obj) + return_t dispatch (const T &obj) { hb_applicable_t *entry = array.push(); entry->init (obj, apply_to); diff --git a/src/hb-sanitize.hh b/src/hb-sanitize.hh index 71bf3a8..6799b78 100644 --- a/src/hb-sanitize.hh +++ b/src/hb-sanitize.hh @@ -130,13 +130,23 @@ 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, 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; } + private: + template auto + _dispatch (const T &obj, hb_priority<1>, Ts &&...ds) HB_AUTO_RETURN + ( obj.sanitize (this, hb_forward (ds)...) ) + template auto + _dispatch (const T &obj, hb_priority<0>, Ts &&...ds) HB_AUTO_RETURN + ( obj.dispatch (this, hb_forward (ds)...) ) + public: + template auto + dispatch (const T &obj, Ts &&...ds) HB_AUTO_RETURN + ( _dispatch (obj, hb_prioritize, hb_forward (ds)...) ) + + void init (hb_blob_t *b) { this->blob = hb_blob_reference (b); diff --git a/src/hb-subset.hh b/src/hb-subset.hh index 4da2b67..1c3f41f 100644 --- a/src/hb-subset.hh +++ b/src/hb-subset.hh @@ -40,11 +40,20 @@ struct hb_subset_context_t : hb_dispatch_context_t { const char *get_name () { return "SUBSET"; } - template - return_t _dispatch (const T &obj, Ts &&...ds) - { return obj.subset (this, hb_forward (ds)...); } static return_t default_return_value () { return true; } + private: + template auto + _dispatch (const T &obj, hb_priority<1>, Ts &&...ds) HB_AUTO_RETURN + ( obj.subset (this, hb_forward (ds)...) ) + template auto + _dispatch (const T &obj, hb_priority<0>, Ts &&...ds) HB_AUTO_RETURN + ( obj.dispatch (this, hb_forward (ds)...) ) + public: + template auto + dispatch (const T &obj, Ts &&...ds) HB_AUTO_RETURN + ( _dispatch (obj, hb_prioritize, hb_forward (ds)...) ) + hb_subset_plan_t *plan; hb_serialize_context_t *serializer; unsigned int debug_depth;