#ifndef OT_LAYOUT_GPOS_POSLOOKUP_HH #define OT_LAYOUT_GPOS_POSLOOKUP_HH #include "PosLookupSubTable.hh" #include "../../../hb-ot-layout-common.hh" namespace OT { namespace Layout { namespace GPOS_impl { struct PosLookup : Lookup { using SubTable = PosLookupSubTable; const SubTable& get_subtable (unsigned int i) const { return Lookup::get_subtable (i); } bool is_reverse () const { return false; } bool apply (hb_ot_apply_context_t *c) const { TRACE_APPLY (this); return_trace (dispatch (c)); } bool intersects (const hb_set_t *glyphs) const { hb_intersects_context_t c (glyphs); return dispatch (&c); } hb_collect_glyphs_context_t::return_t collect_glyphs (hb_collect_glyphs_context_t *c) const { return dispatch (c); } hb_closure_lookups_context_t::return_t closure_lookups (hb_closure_lookups_context_t *c, unsigned this_index) const { if (c->is_lookup_visited (this_index)) return hb_closure_lookups_context_t::default_return_value (); c->set_lookup_visited (this_index); if (!intersects (c->glyphs)) { c->set_lookup_inactive (this_index); return hb_closure_lookups_context_t::default_return_value (); } hb_closure_lookups_context_t::return_t ret = dispatch (c); return ret; } template void collect_coverage (set_t *glyphs) const { hb_collect_coverage_context_t c (glyphs); dispatch (&c); } template static typename context_t::return_t dispatch_recurse_func (context_t *c, unsigned int lookup_index); template typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const { return Lookup::dispatch (c, std::forward (ds)...); } bool subset (hb_subset_context_t *c) const { return Lookup::subset (c); } bool sanitize (hb_sanitize_context_t *c) const { return Lookup::sanitize (c); } }; } } } #endif /* OT_LAYOUT_GPOS_POSLOOKUP_HH */