1 /* 2 * 3 * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved 4 * 5 */ 6 7 #ifndef __LOOKUPTABLES_H 8 #define __LOOKUPTABLES_H 9 10 /** 11 * \file 12 * \internal 13 */ 14 15 #include "LETypes.h" 16 #include "LayoutTables.h" 17 #include "LETableReference.h" 18 19 U_NAMESPACE_BEGIN 20 21 enum LookupTableFormat 22 { 23 ltfSimpleArray = 0, 24 ltfSegmentSingle = 2, 25 ltfSegmentArray = 4, 26 ltfSingleTable = 6, 27 ltfTrimmedArray = 8 28 }; 29 30 typedef le_int16 LookupValue; 31 32 struct LookupTable 33 { 34 le_int16 format; 35 }; 36 37 struct LookupSegment 38 { 39 TTGlyphID lastGlyph; 40 TTGlyphID firstGlyph; 41 LookupValue value; 42 }; 43 44 struct LookupSingle 45 { 46 TTGlyphID glyph; 47 LookupValue value; 48 }; 49 50 struct BinarySearchLookupTable : LookupTable 51 { 52 le_int16 unitSize; 53 le_int16 nUnits; 54 le_int16 searchRange; 55 le_int16 entrySelector; 56 le_int16 rangeShift; 57 58 const LookupSegment *lookupSegment(const LETableReference &base, const LookupSegment *segments, LEGlyphID glyph, LEErrorCode &success) const; 59 60 const LookupSingle *lookupSingle(const LETableReference &base, const LookupSingle *entries, LEGlyphID glyph, LEErrorCode &success) const; 61 }; 62 63 struct SimpleArrayLookupTable : LookupTable 64 { 65 LookupValue valueArray[ANY_NUMBER]; 66 }; 67 LE_VAR_ARRAY(SimpleArrayLookupTable, valueArray) 68 69 struct SegmentSingleLookupTable : BinarySearchLookupTable 70 { 71 LookupSegment segments[ANY_NUMBER]; 72 }; 73 LE_VAR_ARRAY(SegmentSingleLookupTable, segments) 74 75 struct SegmentArrayLookupTable : BinarySearchLookupTable 76 { 77 LookupSegment segments[ANY_NUMBER]; 78 }; 79 LE_VAR_ARRAY(SegmentArrayLookupTable, segments) 80 81 struct SingleTableLookupTable : BinarySearchLookupTable 82 { 83 LookupSingle entries[ANY_NUMBER]; 84 }; 85 LE_VAR_ARRAY(SingleTableLookupTable, entries) 86 87 struct TrimmedArrayLookupTable : LookupTable 88 { 89 TTGlyphID firstGlyph; 90 TTGlyphID glyphCount; 91 LookupValue valueArray[ANY_NUMBER]; 92 }; 93 LE_VAR_ARRAY(TrimmedArrayLookupTable, valueArray) 94 95 U_NAMESPACE_END 96 #endif 97