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
19U_NAMESPACE_BEGIN
20
21enum LookupTableFormat
22{
23    ltfSimpleArray      = 0,
24    ltfSegmentSingle    = 2,
25    ltfSegmentArray     = 4,
26    ltfSingleTable      = 6,
27    ltfTrimmedArray     = 8
28};
29
30typedef le_int16 LookupValue;
31
32struct LookupTable
33{
34    le_int16 format;
35};
36
37struct LookupSegment
38{
39    TTGlyphID   lastGlyph;
40    TTGlyphID   firstGlyph;
41    LookupValue value;
42};
43
44struct LookupSingle
45{
46    TTGlyphID   glyph;
47    LookupValue value;
48};
49
50struct 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
63struct SimpleArrayLookupTable : LookupTable
64{
65    LookupValue valueArray[ANY_NUMBER];
66};
67LE_VAR_ARRAY(SimpleArrayLookupTable, valueArray)
68
69struct SegmentSingleLookupTable : BinarySearchLookupTable
70{
71    LookupSegment segments[ANY_NUMBER];
72};
73LE_VAR_ARRAY(SegmentSingleLookupTable, segments)
74
75struct SegmentArrayLookupTable : BinarySearchLookupTable
76{
77    LookupSegment segments[ANY_NUMBER];
78};
79LE_VAR_ARRAY(SegmentArrayLookupTable, segments)
80
81struct SingleTableLookupTable : BinarySearchLookupTable
82{
83    LookupSingle entries[ANY_NUMBER];
84};
85LE_VAR_ARRAY(SingleTableLookupTable, entries)
86
87struct TrimmedArrayLookupTable : LookupTable
88{
89    TTGlyphID   firstGlyph;
90    TTGlyphID   glyphCount;
91    LookupValue valueArray[ANY_NUMBER];
92};
93LE_VAR_ARRAY(TrimmedArrayLookupTable, valueArray)
94
95U_NAMESPACE_END
96#endif
97