[dispatch] Forward arguments in all dispatch multiplexers
This commit is contained in:
parent
c14efb8e68
commit
36bb24f7b4
|
@ -771,17 +771,17 @@ struct KerxSubTable
|
||||||
unsigned int get_size () const { return u.header.length; }
|
unsigned int get_size () const { return u.header.length; }
|
||||||
unsigned int get_type () const { return u.header.coverage & u.header.SubtableType; }
|
unsigned int get_type () const { return u.header.coverage & u.header.SubtableType; }
|
||||||
|
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
unsigned int subtable_type = get_type ();
|
unsigned int subtable_type = get_type ();
|
||||||
TRACE_DISPATCH (this, subtable_type);
|
TRACE_DISPATCH (this, subtable_type);
|
||||||
switch (subtable_type) {
|
switch (subtable_type) {
|
||||||
case 0: return_trace (c->dispatch (u.format0));
|
case 0: return_trace (c->dispatch (u.format0, hb_forward<Ts> (ds)...));
|
||||||
case 1: return_trace (c->dispatch (u.format1));
|
case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
|
||||||
case 2: return_trace (c->dispatch (u.format2));
|
case 2: return_trace (c->dispatch (u.format2, hb_forward<Ts> (ds)...));
|
||||||
case 4: return_trace (c->dispatch (u.format4));
|
case 4: return_trace (c->dispatch (u.format4, hb_forward<Ts> (ds)...));
|
||||||
case 6: return_trace (c->dispatch (u.format6));
|
case 6: return_trace (c->dispatch (u.format6, hb_forward<Ts> (ds)...));
|
||||||
default: return_trace (c->default_return_value ());
|
default: return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -883,17 +883,17 @@ struct ChainSubtable
|
||||||
Insertion = 5
|
Insertion = 5
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
unsigned int subtable_type = get_type ();
|
unsigned int subtable_type = get_type ();
|
||||||
TRACE_DISPATCH (this, subtable_type);
|
TRACE_DISPATCH (this, subtable_type);
|
||||||
switch (subtable_type) {
|
switch (subtable_type) {
|
||||||
case Rearrangement: return_trace (c->dispatch (u.rearrangement));
|
case Rearrangement: return_trace (c->dispatch (u.rearrangement, hb_forward<Ts> (ds)...));
|
||||||
case Contextual: return_trace (c->dispatch (u.contextual));
|
case Contextual: return_trace (c->dispatch (u.contextual, hb_forward<Ts> (ds)...));
|
||||||
case Ligature: return_trace (c->dispatch (u.ligature));
|
case Ligature: return_trace (c->dispatch (u.ligature, hb_forward<Ts> (ds)...));
|
||||||
case Noncontextual: return_trace (c->dispatch (u.noncontextual));
|
case Noncontextual: return_trace (c->dispatch (u.noncontextual, hb_forward<Ts> (ds)...));
|
||||||
case Insertion: return_trace (c->dispatch (u.insertion));
|
case Insertion: return_trace (c->dispatch (u.insertion, hb_forward<Ts> (ds)...));
|
||||||
default: return_trace (c->default_return_value ());
|
default: return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -121,16 +121,16 @@ struct KernSubTable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
unsigned int subtable_type = get_type ();
|
unsigned int subtable_type = get_type ();
|
||||||
TRACE_DISPATCH (this, subtable_type);
|
TRACE_DISPATCH (this, subtable_type);
|
||||||
switch (subtable_type) {
|
switch (subtable_type) {
|
||||||
case 0: return_trace (c->dispatch (u.format0));
|
case 0: return_trace (c->dispatch (u.format0));
|
||||||
case 1: return_trace (u.header.apple ? c->dispatch (u.format1) : c->default_return_value ());
|
case 1: return_trace (u.header.apple ? c->dispatch (u.format1, hb_forward<Ts> (ds)...) : c->default_return_value ());
|
||||||
case 2: return_trace (c->dispatch (u.format2));
|
case 2: return_trace (c->dispatch (u.format2));
|
||||||
case 3: return_trace (u.header.apple ? c->dispatch (u.format3) : c->default_return_value ());
|
case 3: return_trace (u.header.apple ? c->dispatch (u.format3, hb_forward<Ts> (ds)...) : c->default_return_value ());
|
||||||
default: return_trace (c->default_return_value ());
|
default: return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -304,14 +304,14 @@ struct kern
|
||||||
bool apply (AAT::hb_aat_apply_context_t *c) const
|
bool apply (AAT::hb_aat_apply_context_t *c) const
|
||||||
{ return dispatch (c); }
|
{ return dispatch (c); }
|
||||||
|
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
unsigned int subtable_type = get_type ();
|
unsigned int subtable_type = get_type ();
|
||||||
TRACE_DISPATCH (this, subtable_type);
|
TRACE_DISPATCH (this, subtable_type);
|
||||||
switch (subtable_type) {
|
switch (subtable_type) {
|
||||||
case 0: return_trace (c->dispatch (u.ot));
|
case 0: return_trace (c->dispatch (u.ot, hb_forward<Ts> (ds)...));
|
||||||
case 1: return_trace (c->dispatch (u.aat));
|
case 1: return_trace (c->dispatch (u.aat, hb_forward<Ts> (ds)...));
|
||||||
default: return_trace (c->default_return_value ());
|
default: return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -682,14 +682,14 @@ struct Lookup
|
||||||
return flag;
|
return flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename TSubTable, typename context_t>
|
template <typename TSubTable, typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
unsigned int lookup_type = get_type ();
|
unsigned int lookup_type = get_type ();
|
||||||
TRACE_DISPATCH (this, lookup_type);
|
TRACE_DISPATCH (this, lookup_type);
|
||||||
unsigned int count = get_subtable_count ();
|
unsigned int count = get_subtable_count ();
|
||||||
for (unsigned int i = 0; i < count; i++) {
|
for (unsigned int i = 0; i < count; i++) {
|
||||||
typename context_t::return_t r = get_subtable<TSubTable> (i).dispatch (c, lookup_type);
|
typename context_t::return_t r = get_subtable<TSubTable> (i).dispatch (c, lookup_type, hb_forward<Ts> (ds)...);
|
||||||
if (c->stop_sublookup_iteration (r))
|
if (c->stop_sublookup_iteration (r))
|
||||||
return_trace (r);
|
return_trace (r);
|
||||||
}
|
}
|
||||||
|
|
|
@ -576,14 +576,14 @@ struct SinglePosFormat2
|
||||||
|
|
||||||
struct SinglePos
|
struct SinglePos
|
||||||
{
|
{
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
TRACE_DISPATCH (this, u.format);
|
TRACE_DISPATCH (this, u.format);
|
||||||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||||
switch (u.format) {
|
switch (u.format) {
|
||||||
case 1: return_trace (c->dispatch (u.format1));
|
case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
|
||||||
case 2: return_trace (c->dispatch (u.format2));
|
case 2: return_trace (c->dispatch (u.format2, hb_forward<Ts> (ds)...));
|
||||||
default:return_trace (c->default_return_value ());
|
default:return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -907,14 +907,14 @@ struct PairPosFormat2
|
||||||
|
|
||||||
struct PairPos
|
struct PairPos
|
||||||
{
|
{
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
TRACE_DISPATCH (this, u.format);
|
TRACE_DISPATCH (this, u.format);
|
||||||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||||
switch (u.format) {
|
switch (u.format) {
|
||||||
case 1: return_trace (c->dispatch (u.format1));
|
case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
|
||||||
case 2: return_trace (c->dispatch (u.format2));
|
case 2: return_trace (c->dispatch (u.format2, hb_forward<Ts> (ds)...));
|
||||||
default:return_trace (c->default_return_value ());
|
default:return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1092,13 +1092,13 @@ struct CursivePosFormat1
|
||||||
|
|
||||||
struct CursivePos
|
struct CursivePos
|
||||||
{
|
{
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
TRACE_DISPATCH (this, u.format);
|
TRACE_DISPATCH (this, u.format);
|
||||||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||||
switch (u.format) {
|
switch (u.format) {
|
||||||
case 1: return_trace (c->dispatch (u.format1));
|
case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
|
||||||
default:return_trace (c->default_return_value ());
|
default:return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1208,13 +1208,13 @@ struct MarkBasePosFormat1
|
||||||
|
|
||||||
struct MarkBasePos
|
struct MarkBasePos
|
||||||
{
|
{
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
TRACE_DISPATCH (this, u.format);
|
TRACE_DISPATCH (this, u.format);
|
||||||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||||
switch (u.format) {
|
switch (u.format) {
|
||||||
case 1: return_trace (c->dispatch (u.format1));
|
case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
|
||||||
default:return_trace (c->default_return_value ());
|
default:return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1333,13 +1333,13 @@ struct MarkLigPosFormat1
|
||||||
|
|
||||||
struct MarkLigPos
|
struct MarkLigPos
|
||||||
{
|
{
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
TRACE_DISPATCH (this, u.format);
|
TRACE_DISPATCH (this, u.format);
|
||||||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||||
switch (u.format) {
|
switch (u.format) {
|
||||||
case 1: return_trace (c->dispatch (u.format1));
|
case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
|
||||||
default:return_trace (c->default_return_value ());
|
default:return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1455,13 +1455,13 @@ struct MarkMarkPosFormat1
|
||||||
|
|
||||||
struct MarkMarkPos
|
struct MarkMarkPos
|
||||||
{
|
{
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
TRACE_DISPATCH (this, u.format);
|
TRACE_DISPATCH (this, u.format);
|
||||||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||||
switch (u.format) {
|
switch (u.format) {
|
||||||
case 1: return_trace (c->dispatch (u.format1));
|
case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
|
||||||
default:return_trace (c->default_return_value ());
|
default:return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1507,20 +1507,20 @@ struct PosLookupSubTable
|
||||||
Extension = 9
|
Extension = 9
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type) const
|
typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
TRACE_DISPATCH (this, lookup_type);
|
TRACE_DISPATCH (this, lookup_type);
|
||||||
switch (lookup_type) {
|
switch (lookup_type) {
|
||||||
case Single: return_trace (u.single.dispatch (c));
|
case Single: return_trace (u.single.dispatch (c, hb_forward<Ts> (ds)...));
|
||||||
case Pair: return_trace (u.pair.dispatch (c));
|
case Pair: return_trace (u.pair.dispatch (c, hb_forward<Ts> (ds)...));
|
||||||
case Cursive: return_trace (u.cursive.dispatch (c));
|
case Cursive: return_trace (u.cursive.dispatch (c, hb_forward<Ts> (ds)...));
|
||||||
case MarkBase: return_trace (u.markBase.dispatch (c));
|
case MarkBase: return_trace (u.markBase.dispatch (c, hb_forward<Ts> (ds)...));
|
||||||
case MarkLig: return_trace (u.markLig.dispatch (c));
|
case MarkLig: return_trace (u.markLig.dispatch (c, hb_forward<Ts> (ds)...));
|
||||||
case MarkMark: return_trace (u.markMark.dispatch (c));
|
case MarkMark: return_trace (u.markMark.dispatch (c, hb_forward<Ts> (ds)...));
|
||||||
case Context: return_trace (u.context.dispatch (c));
|
case Context: return_trace (u.context.dispatch (c, hb_forward<Ts> (ds)...));
|
||||||
case ChainContext: return_trace (u.chainContext.dispatch (c));
|
case ChainContext: return_trace (u.chainContext.dispatch (c, hb_forward<Ts> (ds)...));
|
||||||
case Extension: return_trace (u.extension.dispatch (c));
|
case Extension: return_trace (u.extension.dispatch (c, hb_forward<Ts> (ds)...));
|
||||||
default: return_trace (c->default_return_value ());
|
default: return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1581,9 +1581,9 @@ struct PosLookup : Lookup
|
||||||
template <typename context_t>
|
template <typename context_t>
|
||||||
static typename context_t::return_t dispatch_recurse_func (context_t *c, unsigned int lookup_index);
|
static typename context_t::return_t dispatch_recurse_func (context_t *c, unsigned int lookup_index);
|
||||||
|
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{ return Lookup::dispatch<SubTable> (c); }
|
{ return Lookup::dispatch<SubTable> (c, hb_forward<Ts> (ds)...); }
|
||||||
|
|
||||||
bool subset (hb_subset_context_t *c) const
|
bool subset (hb_subset_context_t *c) const
|
||||||
{ return Lookup::subset<SubTable> (c); }
|
{ return Lookup::subset<SubTable> (c); }
|
||||||
|
|
|
@ -251,14 +251,14 @@ struct SingleSubst
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
TRACE_DISPATCH (this, u.format);
|
TRACE_DISPATCH (this, u.format);
|
||||||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||||
switch (u.format) {
|
switch (u.format) {
|
||||||
case 1: return_trace (c->dispatch (u.format1));
|
case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
|
||||||
case 2: return_trace (c->dispatch (u.format2));
|
case 2: return_trace (c->dispatch (u.format2, hb_forward<Ts> (ds)...));
|
||||||
default:return_trace (c->default_return_value ());
|
default:return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -440,13 +440,13 @@ struct MultipleSubst
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
TRACE_DISPATCH (this, u.format);
|
TRACE_DISPATCH (this, u.format);
|
||||||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||||
switch (u.format) {
|
switch (u.format) {
|
||||||
case 1: return_trace (c->dispatch (u.format1));
|
case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
|
||||||
default:return_trace (c->default_return_value ());
|
default:return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -614,13 +614,13 @@ struct AlternateSubst
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
TRACE_DISPATCH (this, u.format);
|
TRACE_DISPATCH (this, u.format);
|
||||||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||||
switch (u.format) {
|
switch (u.format) {
|
||||||
case 1: return_trace (c->dispatch (u.format1));
|
case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
|
||||||
default:return_trace (c->default_return_value ());
|
default:return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -945,13 +945,13 @@ struct LigatureSubst
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
TRACE_DISPATCH (this, u.format);
|
TRACE_DISPATCH (this, u.format);
|
||||||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||||
switch (u.format) {
|
switch (u.format) {
|
||||||
case 1: return_trace (c->dispatch (u.format1));
|
case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
|
||||||
default:return_trace (c->default_return_value ());
|
default:return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1113,13 +1113,13 @@ struct ReverseChainSingleSubstFormat1
|
||||||
|
|
||||||
struct ReverseChainSingleSubst
|
struct ReverseChainSingleSubst
|
||||||
{
|
{
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
TRACE_DISPATCH (this, u.format);
|
TRACE_DISPATCH (this, u.format);
|
||||||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||||
switch (u.format) {
|
switch (u.format) {
|
||||||
case 1: return_trace (c->dispatch (u.format1));
|
case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
|
||||||
default:return_trace (c->default_return_value ());
|
default:return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1153,19 +1153,19 @@ struct SubstLookupSubTable
|
||||||
ReverseChainSingle = 8
|
ReverseChainSingle = 8
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type) const
|
typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
TRACE_DISPATCH (this, lookup_type);
|
TRACE_DISPATCH (this, lookup_type);
|
||||||
switch (lookup_type) {
|
switch (lookup_type) {
|
||||||
case Single: return_trace (u.single.dispatch (c));
|
case Single: return_trace (u.single.dispatch (c, hb_forward<Ts> (ds)...));
|
||||||
case Multiple: return_trace (u.multiple.dispatch (c));
|
case Multiple: return_trace (u.multiple.dispatch (c, hb_forward<Ts> (ds)...));
|
||||||
case Alternate: return_trace (u.alternate.dispatch (c));
|
case Alternate: return_trace (u.alternate.dispatch (c, hb_forward<Ts> (ds)...));
|
||||||
case Ligature: return_trace (u.ligature.dispatch (c));
|
case Ligature: return_trace (u.ligature.dispatch (c, hb_forward<Ts> (ds)...));
|
||||||
case Context: return_trace (u.context.dispatch (c));
|
case Context: return_trace (u.context.dispatch (c, hb_forward<Ts> (ds)...));
|
||||||
case ChainContext: return_trace (u.chainContext.dispatch (c));
|
case ChainContext: return_trace (u.chainContext.dispatch (c, hb_forward<Ts> (ds)...));
|
||||||
case Extension: return_trace (u.extension.dispatch (c));
|
case Extension: return_trace (u.extension.dispatch (c, hb_forward<Ts> (ds)...));
|
||||||
case ReverseChainSingle: return_trace (u.reverseChainContextSingle.dispatch (c));
|
case ReverseChainSingle: return_trace (u.reverseChainContextSingle.dispatch (c, hb_forward<Ts> (ds)...));
|
||||||
default: return_trace (c->default_return_value ());
|
default: return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1331,9 +1331,9 @@ struct SubstLookup : Lookup
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{ return Lookup::dispatch<SubTable> (c); }
|
{ return Lookup::dispatch<SubTable> (c, hb_forward<Ts> (ds)...); }
|
||||||
|
|
||||||
bool subset (hb_subset_context_t *c) const
|
bool subset (hb_subset_context_t *c) const
|
||||||
{ return Lookup::subset<SubTable> (c); }
|
{ return Lookup::subset<SubTable> (c); }
|
||||||
|
|
|
@ -1763,15 +1763,15 @@ struct ContextFormat3
|
||||||
|
|
||||||
struct Context
|
struct Context
|
||||||
{
|
{
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
TRACE_DISPATCH (this, u.format);
|
TRACE_DISPATCH (this, u.format);
|
||||||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||||
switch (u.format) {
|
switch (u.format) {
|
||||||
case 1: return_trace (c->dispatch (u.format1));
|
case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
|
||||||
case 2: return_trace (c->dispatch (u.format2));
|
case 2: return_trace (c->dispatch (u.format2, hb_forward<Ts> (ds)...));
|
||||||
case 3: return_trace (c->dispatch (u.format3));
|
case 3: return_trace (c->dispatch (u.format3, hb_forward<Ts> (ds)...));
|
||||||
default:return_trace (c->default_return_value ());
|
default:return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2474,15 +2474,15 @@ struct ChainContextFormat3
|
||||||
|
|
||||||
struct ChainContext
|
struct ChainContext
|
||||||
{
|
{
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
TRACE_DISPATCH (this, u.format);
|
TRACE_DISPATCH (this, u.format);
|
||||||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||||
switch (u.format) {
|
switch (u.format) {
|
||||||
case 1: return_trace (c->dispatch (u.format1));
|
case 1: return_trace (c->dispatch (u.format1, hb_forward<Ts> (ds)...));
|
||||||
case 2: return_trace (c->dispatch (u.format2));
|
case 2: return_trace (c->dispatch (u.format2, hb_forward<Ts> (ds)...));
|
||||||
case 3: return_trace (c->dispatch (u.format3));
|
case 3: return_trace (c->dispatch (u.format3, hb_forward<Ts> (ds)...));
|
||||||
default:return_trace (c->default_return_value ());
|
default:return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2510,12 +2510,12 @@ struct ExtensionFormat1
|
||||||
return StructAtOffset<typename T::SubTable> (this, offset);
|
return StructAtOffset<typename T::SubTable> (this, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
TRACE_DISPATCH (this, format);
|
TRACE_DISPATCH (this, format);
|
||||||
if (unlikely (!c->may_dispatch (this, this))) return_trace (c->no_dispatch_return_value ());
|
if (unlikely (!c->may_dispatch (this, this))) return_trace (c->no_dispatch_return_value ());
|
||||||
return_trace (get_subtable<typename T::SubTable> ().dispatch (c, get_type ()));
|
return_trace (get_subtable<typename T::SubTable> ().dispatch (c, get_type (), hb_forward<Ts> (ds)...));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is called from may_dispatch() above with hb_sanitize_context_t. */
|
/* This is called from may_dispatch() above with hb_sanitize_context_t. */
|
||||||
|
@ -2557,13 +2557,13 @@ struct Extension
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename context_t>
|
template <typename context_t, typename ...Ts>
|
||||||
typename context_t::return_t dispatch (context_t *c) const
|
typename context_t::return_t dispatch (context_t *c, Ts &&...ds) const
|
||||||
{
|
{
|
||||||
TRACE_DISPATCH (this, u.format);
|
TRACE_DISPATCH (this, u.format);
|
||||||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||||
switch (u.format) {
|
switch (u.format) {
|
||||||
case 1: return_trace (u.format1.dispatch (c));
|
case 1: return_trace (u.format1.dispatch (c, hb_forward<Ts> (ds)...));
|
||||||
default:return_trace (c->default_return_value ());
|
default:return_trace (c->default_return_value ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue