提交 653eeb26 编写于 作者: B Behdad Esfahbod

Make Extension a template

上级 08f1eede
......@@ -1246,7 +1246,7 @@ struct ContextPos : Context {};
struct ChainContextPos : ChainContext {};
struct ExtensionPos : Extension
struct ExtensionPos : Extension<ExtensionPos>
{
inline const struct PosLookupSubTable& get_subtable (void) const
{
......@@ -1255,9 +1255,6 @@ struct ExtensionPos : Extension
return StructAtOffset<PosLookupSubTable> (this, offset);
}
template <typename context_t>
inline typename context_t::return_t process (context_t *c) const;
inline bool sanitize (hb_sanitize_context_t *c);
};
......@@ -1525,12 +1522,6 @@ GPOS::position_finish (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer, hb_bool_t
/* Out-of-class implementation for methods recursing */
template <typename context_t>
inline typename context_t::return_t ExtensionPos::process (context_t *c) const
{
return get_subtable ().process (c, get_type ());
}
inline bool ExtensionPos::sanitize (hb_sanitize_context_t *c)
{
TRACE_SANITIZE (this);
......
......@@ -878,7 +878,7 @@ struct ContextSubst : Context {};
struct ChainContextSubst : ChainContext {};
struct ExtensionSubst : Extension
struct ExtensionSubst : Extension<ExtensionSubst>
{
inline const struct SubstLookupSubTable& get_subtable (void) const
{
......@@ -887,9 +887,6 @@ struct ExtensionSubst : Extension
return StructAtOffset<SubstLookupSubTable> (this, offset);
}
template <typename context_t>
inline typename context_t::return_t process (context_t *c) const;
inline bool sanitize (hb_sanitize_context_t *c);
inline bool is_reverse (void) const;
......@@ -1380,12 +1377,6 @@ GSUB::substitute_finish (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer HB_UNUSE
/* Out-of-class implementation for methods recursing */
template <typename context_t>
inline typename context_t::return_t ExtensionSubst::process (context_t *c) const
{
return get_subtable ().process (c, get_type ());
}
inline bool ExtensionSubst::sanitize (hb_sanitize_context_t *c)
{
TRACE_SANITIZE (this);
......
......@@ -1765,6 +1765,7 @@ struct ExtensionFormat1
DEFINE_SIZE_STATIC (8);
};
template <typename T>
struct Extension
{
inline unsigned int get_type (void) const
......@@ -1782,6 +1783,12 @@ struct Extension
}
}
template <typename context_t>
inline typename context_t::return_t process (context_t *c) const
{
return CastP<T>(this)->get_subtable ().process (c, get_type ());
}
inline bool sanitize (hb_sanitize_context_t *c) {
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return TRACE_RETURN (false);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册