From c2ddfd2d268385257c77c09a9abeacf4230d5377 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 6 May 2010 13:06:15 -0400 Subject: [PATCH] Cleanup Value casts --- src/hb-ot-layout-gpos-private.hh | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/hb-ot-layout-gpos-private.hh b/src/hb-ot-layout-gpos-private.hh index a3db7b5..3f67b14 100644 --- a/src/hb-ot-layout-gpos-private.hh +++ b/src/hb-ot-layout-gpos-private.hh @@ -38,7 +38,7 @@ /* Shared Tables: ValueRecord, Anchor Table, and MarkArray */ -typedef SHORT Value; +typedef USHORT Value; typedef Value ValueRecord[VAR0]; ASSERT_SIZE_VAR (ValueRecord, 0, Value); @@ -106,10 +106,10 @@ struct ValueFormat : USHORT x_scale = layout->font->x_scale; y_scale = layout->font->y_scale; /* design units -> fractional pixel */ - if (format & xPlacement) glyph_pos->x_offset += _hb_16dot16_mul_round (x_scale, *CastP (values++)); - if (format & yPlacement) glyph_pos->y_offset += _hb_16dot16_mul_round (y_scale, *CastP (values++)); - if (format & xAdvance) glyph_pos->x_advance += _hb_16dot16_mul_round (x_scale, *CastP (values++)); - if (format & yAdvance) glyph_pos->y_advance += _hb_16dot16_mul_round (y_scale, *CastP (values++)); + if (format & xPlacement) glyph_pos->x_offset += _hb_16dot16_mul_round (x_scale, get_short (values++)); + if (format & yPlacement) glyph_pos->y_offset += _hb_16dot16_mul_round (y_scale, get_short (values++)); + if (format & xAdvance) glyph_pos->x_advance += _hb_16dot16_mul_round (x_scale, get_short (values++)); + if (format & yAdvance) glyph_pos->y_advance += _hb_16dot16_mul_round (y_scale, get_short (values++)); if (!has_device ()) return; @@ -120,16 +120,16 @@ struct ValueFormat : USHORT /* pixel -> fractional pixel */ if (format & xPlaDevice) { - if (x_ppem) glyph_pos->x_offset += (base+*CastP >(values++)).get_delta (x_ppem) << 16; else values++; + if (x_ppem) glyph_pos->x_offset += (base + get_device (values++)).get_delta (x_ppem) << 16; else values++; } if (format & yPlaDevice) { - if (y_ppem) glyph_pos->y_offset += (base+*CastP >(values++)).get_delta (y_ppem) << 16; else values++; + if (y_ppem) glyph_pos->y_offset += (base + get_device (values++)).get_delta (y_ppem) << 16; else values++; } if (format & xAdvDevice) { - if (x_ppem) glyph_pos->x_advance += (base+*CastP >(values++)).get_delta (x_ppem) << 16; else values++; + if (x_ppem) glyph_pos->x_advance += (base + get_device (values++)).get_delta (x_ppem) << 16; else values++; } if (format & yAdvDevice) { - if (y_ppem) glyph_pos->y_advance += (base+*CastP >(values++)).get_delta (y_ppem) << 16; else values++; + if (y_ppem) glyph_pos->y_advance += (base + get_device (values++)).get_delta (y_ppem) << 16; else values++; } } @@ -142,14 +142,22 @@ struct ValueFormat : USHORT if (format & xAdvance) values++; if (format & yAdvance) values++; - if ((format & xPlaDevice) && !CastP > (values++)->sanitize (context, base)) return false; - if ((format & yPlaDevice) && !CastP > (values++)->sanitize (context, base)) return false; - if ((format & xAdvDevice) && !CastP > (values++)->sanitize (context, base)) return false; - if ((format & yAdvDevice) && !CastP > (values++)->sanitize (context, base)) return false; + if ((format & xPlaDevice) && !get_device (values++).sanitize (context, base)) return false; + if ((format & yPlaDevice) && !get_device (values++).sanitize (context, base)) return false; + if ((format & xAdvDevice) && !get_device (values++).sanitize (context, base)) return false; + if ((format & yAdvDevice) && !get_device (values++).sanitize (context, base)) return false; return true; } + static inline OffsetTo& get_device (Value* value) + { return *CastP > (value); } + static inline const OffsetTo& get_device (const Value* value) + { return *CastP > (value); } + + static inline const SHORT& get_short (const Value* value) + { return *CastP (value); } + public: inline bool has_device () const { -- 2.7.4