sl@0: /* sl@0: * sl@0: * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved sl@0: * sl@0: */ sl@0: sl@0: #ifndef __LOOKUPTABLES_H sl@0: #define __LOOKUPTABLES_H sl@0: sl@0: /** sl@0: * \file sl@0: * \internal sl@0: */ sl@0: sl@0: #include "LETypes.h" sl@0: #include "LayoutTables.h" sl@0: sl@0: U_NAMESPACE_BEGIN sl@0: sl@0: enum LookupTableFormat sl@0: { sl@0: ltfSimpleArray = 0, sl@0: ltfSegmentSingle = 2, sl@0: ltfSegmentArray = 4, sl@0: ltfSingleTable = 6, sl@0: ltfTrimmedArray = 8 sl@0: }; sl@0: sl@0: typedef le_int16 LookupValue; sl@0: sl@0: struct LookupTable sl@0: { sl@0: le_int16 format; sl@0: }; sl@0: sl@0: struct LookupSegment sl@0: { sl@0: TTGlyphID lastGlyph; sl@0: TTGlyphID firstGlyph; sl@0: LookupValue value; sl@0: }; sl@0: sl@0: struct LookupSingle sl@0: { sl@0: TTGlyphID glyph; sl@0: LookupValue value; sl@0: }; sl@0: sl@0: struct BinarySearchLookupTable : LookupTable sl@0: { sl@0: le_int16 unitSize; sl@0: le_int16 nUnits; sl@0: le_int16 searchRange; sl@0: le_int16 entrySelector; sl@0: le_int16 rangeShift; sl@0: sl@0: const LookupSegment *lookupSegment(const LookupSegment *segments, LEGlyphID glyph) const; sl@0: sl@0: const LookupSingle *lookupSingle(const LookupSingle *entries, LEGlyphID glyph) const; sl@0: }; sl@0: sl@0: struct SimpleArrayLookupTable : LookupTable sl@0: { sl@0: LookupValue valueArray[ANY_NUMBER]; sl@0: }; sl@0: sl@0: struct SegmentSingleLookupTable : BinarySearchLookupTable sl@0: { sl@0: LookupSegment segments[ANY_NUMBER]; sl@0: }; sl@0: sl@0: struct SegmentArrayLookupTable : BinarySearchLookupTable sl@0: { sl@0: LookupSegment segments[ANY_NUMBER]; sl@0: }; sl@0: sl@0: struct SingleTableLookupTable : BinarySearchLookupTable sl@0: { sl@0: LookupSingle entries[ANY_NUMBER]; sl@0: }; sl@0: sl@0: struct TrimmedArrayLookupTable : LookupTable sl@0: { sl@0: TTGlyphID firstGlyph; sl@0: TTGlyphID glyphCount; sl@0: LookupValue valueArray[ANY_NUMBER]; sl@0: }; sl@0: sl@0: U_NAMESPACE_END sl@0: #endif