From 569da92bc6956f42d9b2d65c784e184fb6380efe Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 10 May 2010 16:38:32 -0400 Subject: [PATCH] Cleanup ASSERT_SIZE_VAR --- src/hb-open-file-private.hh | 9 ++++++--- src/hb-open-type-private.hh | 6 ++++-- src/hb-ot-layout-common-private.hh | 22 ++++++++++++---------- src/hb-ot-layout-gdef-private.hh | 3 ++- src/hb-ot-layout-gpos-private.hh | 30 +++++++++++++++++++----------- src/hb-ot-layout-gsubgpos-private.hh | 10 ++++++---- src/hb-private.h | 8 -------- 7 files changed, 49 insertions(+), 39 deletions(-) diff --git a/src/hb-open-file-private.hh b/src/hb-open-file-private.hh index c531c29..53e947a 100644 --- a/src/hb-open-file-private.hh +++ b/src/hb-open-file-private.hh @@ -45,6 +45,7 @@ struct OpenTypeFontFile; struct OffsetTable; struct TTCHeader; + typedef struct TableDirectory { inline bool sanitize (hb_sanitize_context_t *context) { @@ -52,13 +53,13 @@ typedef struct TableDirectory return context->check_struct (this); } - DEFINE_SIZE_STATIC (16); - Tag tag; /* 4-byte identifier. */ CheckSum checkSum; /* CheckSum for this table. */ ULONG offset; /* Offset from beginning of TrueType font * file. */ ULONG length; /* Length of this table. */ + public: + DEFINE_SIZE_STATIC (16); } OpenTypeTable; typedef struct OffsetTable @@ -110,8 +111,10 @@ typedef struct OffsetTable USHORT entrySelector; /* Log2(maximum power of 2 <= numTables). */ USHORT rangeShift; /* NumTables x 16-searchRange. */ TableDirectory tableDir[VAR]; /* TableDirectory entries. numTables items */ + public: + DEFINE_SIZE_VAR (12, TableDirectory); } OpenTypeFontFace; -ASSERT_SIZE_VAR (OffsetTable, 12, TableDirectory); + /* * TrueType Collections diff --git a/src/hb-open-type-private.hh b/src/hb-open-type-private.hh index c4f2709..aab85fd 100644 --- a/src/hb-open-type-private.hh +++ b/src/hb-open-type-private.hh @@ -101,7 +101,7 @@ inline Type& StructAfter(TObject &X) { ASSERT_STATIC (sizeof (*this) == (size) + VAR0 * sizeof (_var_type)); } \ static const unsigned int min_size = (size) -#define DEFINE_SIZE_VAR2(_type, size, _var_type1, _var_type2) \ +#define DEFINE_SIZE_VAR2(size, _var_type1, _var_type2) \ inline void _size_assertion (void) const \ { ASSERT_STATIC (sizeof (*this) == (size) + VAR0 * sizeof (_var_type1) + VAR0 * sizeof (_var_type2)); } \ static const unsigned int min_size = (size) @@ -379,8 +379,10 @@ struct IntType TRACE_SANITIZE (); return context->check_struct (this); } + private: + BEInt v; + public: DEFINE_SIZE_STATIC (sizeof (Type)); - private: BEInt v; }; typedef IntType USHORT; /* 16-bit unsigned integer. */ diff --git a/src/hb-ot-layout-common-private.hh b/src/hb-ot-layout-common-private.hh index d73a21a..7215415 100644 --- a/src/hb-ot-layout-common-private.hh +++ b/src/hb-ot-layout-common-private.hh @@ -57,12 +57,12 @@ struct Record && offset.sanitize (context, base); } - DEFINE_SIZE_STATIC (6); - Tag tag; /* 4-byte Tag identifier */ OffsetTo offset; /* Offset from beginning of object holding * the Record */ + public: + DEFINE_SIZE_STATIC (6); }; template @@ -170,14 +170,14 @@ struct LangSys && featureIndex.sanitize (context); } - DEFINE_SIZE_STATIC (6); - Offset lookupOrder; /* = Null (reserved for an offset to a * reordering table) */ USHORT reqFeatureIndex;/* Index of a feature required for this * language system--if no required features * = 0xFFFF */ IndexArray featureIndex; /* Array of indices into the FeatureList */ + public: + DEFINE_SIZE_STATIC (6); }; DEFINE_NULL_DATA (LangSys, "\0\0\xFF\xFF"); @@ -305,8 +305,9 @@ struct Lookup USHORT markFilteringSetX[VAR]; /* Index (base 0) into GDEF mark glyph sets * structure. This field is only present if bit * UseMarkFilteringSet of lookup flags is set. */ + public: + DEFINE_SIZE_VAR (6, USHORT); }; -ASSERT_SIZE_VAR (Lookup, 6, USHORT); typedef OffsetListOf LookupList; ASSERT_SIZE (LookupList, 2); @@ -365,13 +366,13 @@ struct CoverageRangeRecord return context->check_struct (this); } - DEFINE_SIZE_STATIC (6); - private: GlyphID start; /* First GlyphID in the range */ GlyphID end; /* Last GlyphID in the range */ USHORT startCoverageIndex; /* Coverage Index of first GlyphID in * range */ + public: + DEFINE_SIZE_STATIC (6); }; DEFINE_NULL_DATA (CoverageRangeRecord, "\000\001"); @@ -486,12 +487,12 @@ struct ClassRangeRecord return context->check_struct (this); } - DEFINE_SIZE_STATIC (6); - private: GlyphID start; /* First GlyphID in the range */ GlyphID end; /* Last GlyphID in the range */ USHORT classValue; /* Applied to all glyphs in the range */ + public: + DEFINE_SIZE_STATIC (6); }; DEFINE_NULL_DATA (ClassRangeRecord, "\000\001"); @@ -610,8 +611,9 @@ struct Device * 3 Signed 8-bit value, 2 values per uint16 */ USHORT deltaValue[VAR]; /* Array of compressed data */ + public: + DEFINE_SIZE_VAR (6, USHORT); }; -ASSERT_SIZE_VAR (Device, 6, USHORT); #endif /* HB_OT_LAYOUT_COMMON_PRIVATE_HH */ diff --git a/src/hb-ot-layout-gdef-private.hh b/src/hb-ot-layout-gdef-private.hh index 652561c..e6cf7b8 100644 --- a/src/hb-ot-layout-gdef-private.hh +++ b/src/hb-ot-layout-gdef-private.hh @@ -383,8 +383,9 @@ struct GDEF * definitions--from beginning of GDEF * header (may be NULL). Introduced * in version 00010002. */ + public: + DEFINE_SIZE_VAR (12, OffsetTo); }; -ASSERT_SIZE_VAR (GDEF, 12, OffsetTo); #endif /* HB_OT_LAYOUT_GDEF_PRIVATE_HH */ diff --git a/src/hb-ot-layout-gpos-private.hh b/src/hb-ot-layout-gpos-private.hh index 8bf2507..eb53ac1 100644 --- a/src/hb-ot-layout-gpos-private.hh +++ b/src/hb-ot-layout-gpos-private.hh @@ -41,7 +41,6 @@ typedef USHORT Value; typedef Value ValueRecord[VAR0]; -ASSERT_SIZE_VAR (ValueRecord, 0, Value); struct ValueFormat : USHORT { @@ -360,8 +359,9 @@ struct AnchorMatrix OffsetTo matrix[VAR]; /* Matrix of offsets to Anchor tables-- * from beginning of AnchorMatrix table */ + public: + DEFINE_SIZE_VAR (2, OffsetTo); }; -ASSERT_SIZE_VAR (AnchorMatrix, 2, OffsetTo); struct MarkRecord @@ -374,13 +374,13 @@ struct MarkRecord && markAnchor.sanitize (context, base); } - DEFINE_SIZE_STATIC (4); - private: USHORT klass; /* Class defined for this mark */ OffsetTo markAnchor; /* Offset to Anchor table--from * beginning of MarkArray table */ + public: + DEFINE_SIZE_STATIC (4); }; struct MarkArray @@ -462,8 +462,9 @@ struct SinglePosFormat1 ValueRecord values; /* Defines positioning * value(s)--applied to all glyphs in * the Coverage table */ + public: + DEFINE_SIZE_VAR (6, ValueRecord); }; -ASSERT_SIZE_VAR (SinglePosFormat1, 6, ValueRecord); struct SinglePosFormat2 { @@ -505,8 +506,9 @@ struct SinglePosFormat2 USHORT valueCount; /* Number of ValueRecords */ ValueRecord values; /* Array of ValueRecords--positioning * values applied to glyphs */ + public: + DEFINE_SIZE_VAR (8, ValueRecord); }; -ASSERT_SIZE_VAR (SinglePosFormat2, 8, ValueRecord); struct SinglePos { @@ -552,8 +554,9 @@ struct PairValueRecord * Coverage table */ ValueRecord values; /* Positioning data for the first glyph * followed by for second glyph */ + public: + DEFINE_SIZE_VAR (2, ValueRecord); }; -ASSERT_SIZE_VAR (PairValueRecord, 2, ValueRecord); struct PairSet { @@ -572,8 +575,9 @@ struct PairSet PairValueRecord array[VAR]; /* Array of PairValueRecords--ordered * by GlyphID of the second glyph */ + public: + DEFINE_SIZE_VAR (2, PairValueRecord); }; -ASSERT_SIZE_VAR (PairSet, 2, PairValueRecord); struct PairPosFormat1 { @@ -755,8 +759,9 @@ struct PairPosFormat2 ValueRecord values; /* Matrix of value pairs: * class1-major, class2-minor, * Each entry has value1 and value2 */ + public: + DEFINE_SIZE_VAR (16, ValueRecord); }; -ASSERT_SIZE_VAR (PairPosFormat2, 16, ValueRecord); struct PairPos { @@ -794,14 +799,15 @@ struct PairPos struct EntryExitRecord { + friend struct CursivePosFormat1; + inline bool sanitize (hb_sanitize_context_t *context, void *base) { TRACE_SANITIZE (); return entryAnchor.sanitize (context, base) && exitAnchor.sanitize (context, base); } - DEFINE_SIZE_STATIC (4); - + private: OffsetTo entryAnchor; /* Offset to EntryAnchor table--from * beginning of CursivePos @@ -810,6 +816,8 @@ struct EntryExitRecord exitAnchor; /* Offset to ExitAnchor table--from * beginning of CursivePos * subtable--may be NULL */ + public: + DEFINE_SIZE_STATIC (4); }; struct CursivePosFormat1 diff --git a/src/hb-ot-layout-gsubgpos-private.hh b/src/hb-ot-layout-gsubgpos-private.hh index f389b19..0b59748 100644 --- a/src/hb-ot-layout-gsubgpos-private.hh +++ b/src/hb-ot-layout-gsubgpos-private.hh @@ -177,12 +177,12 @@ struct LookupRecord return context->check_struct (this); } - DEFINE_SIZE_STATIC (4); - USHORT sequenceIndex; /* Index into current glyph * sequence--first glyph = 0 */ USHORT lookupListIndex; /* Lookup to apply to that * position--zero--based */ + public: + DEFINE_SIZE_STATIC (4); }; static inline bool apply_lookup (hb_apply_context_t *context, @@ -302,8 +302,9 @@ struct Rule * second glyph */ LookupRecord lookupRecordX[VAR]; /* Array of LookupRecords--in * design order */ + public: + DEFINE_SIZE_VAR2 (4, USHORT, LookupRecord); }; -ASSERT_SIZE_VAR2 (Rule, 4, USHORT, LookupRecord); struct RuleSet { @@ -461,8 +462,9 @@ struct ContextFormat3 * table in glyph sequence order */ LookupRecord lookupRecordX[VAR]; /* Array of LookupRecords--in * design order */ + public: + DEFINE_SIZE_VAR2 (6, OffsetTo, LookupRecord); }; -ASSERT_SIZE_VAR2 (ContextFormat3, 6, OffsetTo, LookupRecord); struct Context { diff --git a/src/hb-private.h b/src/hb-private.h index 3f9ec9d..3f8515b 100644 --- a/src/hb-private.h +++ b/src/hb-private.h @@ -85,14 +85,6 @@ #define ASSERT_SIZE(_type, _size) ASSERT_STATIC (sizeof (_type) == (_size)) -/* Size signifying variable-sized array */ -#define VAR 1 - -#define VAR0 (VAR+0) -#define ASSERT_SIZE_VAR(_type, _size, _var_type) \ - ASSERT_STATIC (sizeof (_type) == (_size) + VAR0 * sizeof (_var_type)) -#define ASSERT_SIZE_VAR2(_type, _size, _var_type1, _var_type2) \ - ASSERT_STATIC (sizeof (_type) == (_size) + VAR0 * sizeof (_var_type1) + VAR0 * sizeof (_var_type2)) #if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__) #define _HB_BOOLEAN_EXPR(expr) \ -- 2.7.4