Imported Upstream version 58.2
[platform/upstream/icu.git] / source / test / perf / leperf / cmaps.h
1 /**************************************************************************
2 *
3 *   Copyright (C) 2016 and later: Unicode, Inc. and others.
4 *   License & terms of use: http://www.unicode.org/copyright.html#License
5 *
6 ***************************************************************************
7 ***************************************************************************
8 *
9 *   Copyright (C) 1998-2013, International Business Machines
10 *   Corporation and others.  All Rights Reserved.
11 *
12 ************************************************************************/
13
14
15 #ifndef __CMAPS_H
16 #define __CMAPS_H
17
18 #include "layout/LETypes.h"
19 //#include "letest.h"
20 #include "sfnt.h"
21
22 class CMAPMapper
23 {
24 public:
25     virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const = 0;
26
27     virtual ~CMAPMapper();
28
29     static CMAPMapper *createUnicodeMapper(const CMAPTable *cmap);
30
31 protected:
32     CMAPMapper(const CMAPTable *cmap);
33
34     CMAPMapper() {};
35
36 private:
37     const CMAPTable *fcmap;
38 };
39
40 class CMAPFormat4Mapper : public CMAPMapper
41 {
42 public:
43     CMAPFormat4Mapper(const CMAPTable *cmap, const CMAPFormat4Encoding *header);
44
45     virtual ~CMAPFormat4Mapper();
46
47     virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const;
48
49 protected:
50     CMAPFormat4Mapper() {};
51
52 private:
53     le_uint16       fEntrySelector;
54     le_uint16       fRangeShift;
55     const le_uint16 *fEndCodes;
56     const le_uint16 *fStartCodes;
57     const le_uint16 *fIdDelta;
58     const le_uint16 *fIdRangeOffset;
59 };
60
61 class CMAPGroupMapper : public CMAPMapper
62 {
63 public:
64     CMAPGroupMapper(const CMAPTable *cmap, const CMAPGroup *groups, le_uint32 nGroups);
65
66     virtual ~CMAPGroupMapper();
67
68     virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const;
69
70 protected:
71     CMAPGroupMapper() {};
72
73 private:
74     le_int32 fPower;
75     le_int32 fRangeOffset;
76     const CMAPGroup *fGroups;
77 };
78
79 inline CMAPMapper::CMAPMapper(const CMAPTable *cmap)
80     : fcmap(cmap)
81 {
82     // nothing else to do
83 }
84
85 inline CMAPMapper::~CMAPMapper()
86 {
87     LE_DELETE_ARRAY(fcmap);
88 }
89
90 #endif
91