[reorg] Move sanitize/dispatch and size macros to top
This commit is contained in:
parent
f577d02f4a
commit
c180f93766
|
@ -11,6 +11,26 @@ namespace GSUB {
|
||||||
|
|
||||||
struct SingleSubst
|
struct SingleSubst
|
||||||
{
|
{
|
||||||
|
protected:
|
||||||
|
union {
|
||||||
|
HBUINT16 format; /* Format identifier */
|
||||||
|
SingleSubstFormat1 format1;
|
||||||
|
SingleSubstFormat2 format2;
|
||||||
|
} u;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
template <typename context_t, typename ...Ts>
|
||||||
|
typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
|
||||||
|
{
|
||||||
|
TRACE_DISPATCH (this, u.format);
|
||||||
|
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||||
|
switch (u.format) {
|
||||||
|
case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
|
||||||
|
case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
|
||||||
|
default:return_trace (c->default_return_value ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template<typename Iterator,
|
template<typename Iterator,
|
||||||
hb_requires (hb_is_sorted_source_of (Iterator,
|
hb_requires (hb_is_sorted_source_of (Iterator,
|
||||||
|
@ -40,25 +60,6 @@ struct SingleSubst
|
||||||
default:return_trace (false);
|
default:return_trace (false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename context_t, typename ...Ts>
|
|
||||||
typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
|
|
||||||
{
|
|
||||||
TRACE_DISPATCH (this, u.format);
|
|
||||||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
|
||||||
switch (u.format) {
|
|
||||||
case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
|
|
||||||
case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
|
|
||||||
default:return_trace (c->default_return_value ());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
union {
|
|
||||||
HBUINT16 format; /* Format identifier */
|
|
||||||
SingleSubstFormat1 format1;
|
|
||||||
SingleSubstFormat2 format2;
|
|
||||||
} u;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Iterator>
|
template<typename Iterator>
|
||||||
|
|
|
@ -19,6 +19,13 @@ struct SingleSubstFormat1
|
||||||
* substitute GlyphID, modulo 0x10000 */
|
* substitute GlyphID, modulo 0x10000 */
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
DEFINE_SIZE_STATIC (6);
|
||||||
|
|
||||||
|
bool sanitize (hb_sanitize_context_t *c) const
|
||||||
|
{
|
||||||
|
TRACE_SANITIZE (this);
|
||||||
|
return_trace (coverage.sanitize (c, this) && deltaGlyphID.sanitize (c));
|
||||||
|
}
|
||||||
|
|
||||||
bool intersects (const hb_set_t *glyphs) const
|
bool intersects (const hb_set_t *glyphs) const
|
||||||
{ return (this+coverage).intersects (glyphs); }
|
{ return (this+coverage).intersects (glyphs); }
|
||||||
|
@ -106,15 +113,6 @@ struct SingleSubstFormat1
|
||||||
SingleSubst_serialize (c->serializer, it);
|
SingleSubst_serialize (c->serializer, it);
|
||||||
return_trace (ret);
|
return_trace (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool sanitize (hb_sanitize_context_t *c) const
|
|
||||||
{
|
|
||||||
TRACE_SANITIZE (this);
|
|
||||||
return_trace (coverage.sanitize (c, this) && deltaGlyphID.sanitize (c));
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
DEFINE_SIZE_STATIC (6);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,13 @@ struct SingleSubstFormat2
|
||||||
* GlyphIDs--ordered by Coverage Index */
|
* GlyphIDs--ordered by Coverage Index */
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
DEFINE_SIZE_ARRAY (6, substitute);
|
||||||
|
|
||||||
|
bool sanitize (hb_sanitize_context_t *c) const
|
||||||
|
{
|
||||||
|
TRACE_SANITIZE (this);
|
||||||
|
return_trace (coverage.sanitize (c, this) && substitute.sanitize (c));
|
||||||
|
}
|
||||||
|
|
||||||
bool intersects (const hb_set_t *glyphs) const
|
bool intersects (const hb_set_t *glyphs) const
|
||||||
{ return (this+coverage).intersects (glyphs); }
|
{ return (this+coverage).intersects (glyphs); }
|
||||||
|
@ -105,15 +112,6 @@ struct SingleSubstFormat2
|
||||||
SingleSubst_serialize (c->serializer, it);
|
SingleSubst_serialize (c->serializer, it);
|
||||||
return_trace (ret);
|
return_trace (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool sanitize (hb_sanitize_context_t *c) const
|
|
||||||
{
|
|
||||||
TRACE_SANITIZE (this);
|
|
||||||
return_trace (coverage.sanitize (c, this) && substitute.sanitize (c));
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
DEFINE_SIZE_ARRAY (6, substitute);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue