|
|
|
@ -363,6 +363,14 @@ struct Lookup |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inline typename T::type get_class (hb_codepoint_t glyph_id, |
|
|
|
|
unsigned int num_glyphs, |
|
|
|
|
unsigned int outOfRange) const |
|
|
|
|
{ |
|
|
|
|
const T *v = get_value (glyph_id, num_glyphs); |
|
|
|
|
return v ? *v : outOfRange; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inline bool sanitize (hb_sanitize_context_t *c) const |
|
|
|
|
{ |
|
|
|
|
TRACE_SANITIZE (this); |
|
|
|
@ -638,6 +646,7 @@ struct StateTable |
|
|
|
|
DEFINE_SIZE_STATIC (4 * sizeof (HBUINT)); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <typename HBUCHAR> |
|
|
|
|
struct ClassTable |
|
|
|
|
{ |
|
|
|
|
inline unsigned int get_class (hb_codepoint_t glyph_id, unsigned int outOfRange) const |
|
|
|
@ -645,6 +654,12 @@ struct ClassTable |
|
|
|
|
unsigned int i = glyph_id - firstGlyph; |
|
|
|
|
return i >= classArray.len ? outOfRange : classArray.arrayZ[i]; |
|
|
|
|
} |
|
|
|
|
inline unsigned int get_class (hb_codepoint_t glyph_id, |
|
|
|
|
unsigned int num_glyphs HB_UNUSED, |
|
|
|
|
unsigned int outOfRange) const |
|
|
|
|
{ |
|
|
|
|
return get_class (glyph_id, outOfRange); |
|
|
|
|
} |
|
|
|
|
inline bool sanitize (hb_sanitize_context_t *c) const |
|
|
|
|
{ |
|
|
|
|
TRACE_SANITIZE (this); |
|
|
|
@ -652,7 +667,7 @@ struct ClassTable |
|
|
|
|
} |
|
|
|
|
protected: |
|
|
|
|
GlyphID firstGlyph; /* First glyph index included in the trimmed array. */ |
|
|
|
|
ArrayOf<HBUINT8> classArray; /* The class codes (indexed by glyph index minus
|
|
|
|
|
ArrayOf<HBUCHAR> classArray; /* The class codes (indexed by glyph index minus
|
|
|
|
|
* firstGlyph). */ |
|
|
|
|
public: |
|
|
|
|
DEFINE_SIZE_ARRAY (4, classArray); |
|
|
|
@ -663,15 +678,8 @@ struct ObsoleteTypes |
|
|
|
|
static const bool extended = false; |
|
|
|
|
typedef HBUINT16 HBUINT; |
|
|
|
|
typedef HBUINT8 HBUSHORT; |
|
|
|
|
struct ClassType : ClassTable |
|
|
|
|
{ |
|
|
|
|
inline unsigned int get_class (hb_codepoint_t glyph_id, |
|
|
|
|
unsigned int num_glyphs HB_UNUSED, |
|
|
|
|
unsigned int outOfRange) const |
|
|
|
|
{ |
|
|
|
|
return ClassTable::get_class (glyph_id, outOfRange); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
typedef ClassTable<HBUINT8> ClassType; |
|
|
|
|
|
|
|
|
|
template <typename T> |
|
|
|
|
static inline unsigned int offsetToIndex (unsigned int offset, |
|
|
|
|
const void *base, |
|
|
|
@ -692,16 +700,8 @@ struct ExtendedTypes |
|
|
|
|
static const bool extended = true; |
|
|
|
|
typedef HBUINT32 HBUINT; |
|
|
|
|
typedef HBUINT16 HBUSHORT; |
|
|
|
|
struct ClassType : Lookup<HBUINT16> |
|
|
|
|
{ |
|
|
|
|
inline unsigned int get_class (hb_codepoint_t glyph_id, |
|
|
|
|
unsigned int num_glyphs, |
|
|
|
|
unsigned int outOfRange) const |
|
|
|
|
{ |
|
|
|
|
const HBUINT16 *v = get_value (glyph_id, num_glyphs); |
|
|
|
|
return v ? *v : outOfRange; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
typedef Lookup<HBUINT16> ClassType; |
|
|
|
|
|
|
|
|
|
template <typename T> |
|
|
|
|
static inline unsigned int offsetToIndex (unsigned int offset, |
|
|
|
|
const void *base, |
|
|
|
|