]>
Commit | Line | Data |
---|---|---|
374ca955 A |
1 | /* |
2 | ********************************************************************** | |
4388f060 | 3 | * Copyright (C) 1998-2011, International Business Machines |
374ca955 A |
4 | * Corporation and others. All Rights Reserved. |
5 | ********************************************************************** | |
6 | */ | |
7 | ||
8 | #ifndef __LEINSERTIONLIST_H | |
9 | #define __LEINSERTIONLIST_H | |
10 | ||
11 | #include "LETypes.h" | |
12 | ||
13 | U_NAMESPACE_BEGIN | |
14 | ||
15 | struct InsertionRecord; | |
16 | ||
4388f060 | 17 | #ifndef U_HIDE_INTERNAL_API |
374ca955 A |
18 | /** |
19 | * This class encapsulates the callback used by <code>LEInsertionList</code> | |
20 | * to apply an insertion from the insertion list. | |
21 | * | |
22 | * @internal | |
23 | */ | |
73c04bcf | 24 | class U_LAYOUT_API LEInsertionCallback |
374ca955 A |
25 | { |
26 | public: | |
27 | /** | |
28 | * This method will be called by <code>LEInsertionList::applyInsertions</code> for each | |
29 | * entry on the insertion list. | |
30 | * | |
31 | * @param atPosition the position of the insertion | |
32 | * @param count the number of glyphs to insert | |
33 | * @param newGlyphs the address of the glyphs to insert | |
34 | * | |
35 | * @return <code>TRUE</code> if <code>LEInsertions::applyInsertions</code> should | |
36 | * stop after applying this insertion. | |
37 | * | |
38 | * @internal | |
39 | */ | |
40 | virtual le_bool applyInsertion(le_int32 atPosition, le_int32 count, LEGlyphID newGlyphs[]) = 0; | |
73c04bcf A |
41 | |
42 | /** | |
43 | * The destructor | |
44 | */ | |
45 | virtual ~LEInsertionCallback(); | |
374ca955 A |
46 | }; |
47 | ||
48 | /** | |
49 | * This class is used to keep track of insertions to an array of | |
50 | * <code>LEGlyphIDs</code>. The insertions are kept on a linked | |
51 | * list of <code>InsertionRecords</code> so that the glyph array | |
52 | * doesn't have to be grown for each insertion. The insertions are | |
53 | * stored on the list from leftmost to rightmost to make it easier | |
54 | * to do the insertions. | |
55 | * | |
56 | * The insertions are applied to the array by calling the | |
57 | * <code>applyInsertions</code> method, which calls a client | |
58 | * supplied <code>LEInsertionCallback</code> object to actually | |
59 | * apply the individual insertions. | |
60 | * | |
61 | * @internal | |
62 | */ | |
63 | class LEInsertionList : public UObject | |
64 | { | |
65 | public: | |
66 | /** | |
67 | * Construct an empty insertion list. | |
68 | * | |
69 | * @param rightToLeft <code>TRUE</code> if the glyphs are stored | |
70 | * in the array in right to left order. | |
71 | * | |
72 | * @internal | |
73 | */ | |
74 | LEInsertionList(le_bool rightToLeft); | |
75 | ||
76 | /** | |
77 | * The destructor. | |
78 | */ | |
79 | ~LEInsertionList(); | |
80 | ||
81 | /** | |
82 | * Add an entry to the insertion list. | |
83 | * | |
84 | * @param position the glyph at this position in the array will be | |
85 | * replaced by the new glyphs. | |
86 | * @param count the number of new glyphs | |
729e4ab9 | 87 | * @param success set to an error code if the auxillary data cannot be retrieved. |
374ca955 A |
88 | * |
89 | * @return the address of an array in which to store the new glyphs. This will | |
90 | * <em>not</em> be in the glyph array. | |
91 | * | |
92 | * @internal | |
93 | */ | |
729e4ab9 | 94 | LEGlyphID *insert(le_int32 position, le_int32 count, LEErrorCode &success); |
374ca955 A |
95 | |
96 | /** | |
97 | * Return the number of new glyphs that have been inserted. | |
98 | * | |
99 | * @return the number of new glyphs which have been inserted | |
100 | * | |
101 | * @internal | |
102 | */ | |
103 | le_int32 getGrowAmount(); | |
104 | ||
105 | /** | |
106 | * Call the <code>LEInsertionCallback</code> once for each | |
107 | * entry on the insertion list. | |
108 | * | |
109 | * @param callback the <code>LEInsertionCallback</code> to call for each insertion. | |
110 | * | |
111 | * @return <code>TRUE</code> if <code>callback</code> returned <code>TRUE</code> to | |
112 | * terminate the insertion list processing. | |
113 | * | |
114 | * @internal | |
115 | */ | |
116 | le_bool applyInsertions(LEInsertionCallback *callback); | |
117 | ||
118 | /** | |
119 | * Empty the insertion list and free all associated | |
120 | * storage. | |
121 | * | |
122 | * @internal | |
123 | */ | |
124 | void reset(); | |
125 | ||
126 | /** | |
127 | * ICU "poor man's RTTI", returns a UClassID for the actual class. | |
128 | * | |
129 | * @stable ICU 2.8 | |
130 | */ | |
131 | virtual UClassID getDynamicClassID() const; | |
132 | ||
133 | /** | |
134 | * ICU "poor man's RTTI", returns a UClassID for this class. | |
135 | * | |
136 | * @stable ICU 2.8 | |
137 | */ | |
138 | static UClassID getStaticClassID(); | |
139 | ||
140 | private: | |
141 | ||
142 | /** | |
143 | * The head of the insertion list. | |
144 | * | |
145 | * @internal | |
146 | */ | |
147 | InsertionRecord *head; | |
148 | ||
149 | /** | |
150 | * The tail of the insertion list. | |
151 | * | |
152 | * @internal | |
153 | */ | |
154 | InsertionRecord *tail; | |
155 | ||
156 | /** | |
157 | * The total number of new glyphs on the insertion list. | |
158 | * | |
159 | * @internal | |
160 | */ | |
161 | le_int32 growAmount; | |
162 | ||
163 | /** | |
164 | * Set to <code>TRUE</code> if the glyphs are in right | |
165 | * to left order. Since we want the rightmost insertion | |
166 | * to be first on the list, we need to append the | |
167 | * insertions in this case. Otherwise they're prepended. | |
168 | * | |
169 | * @internal | |
170 | */ | |
171 | le_bool append; | |
172 | }; | |
4388f060 | 173 | #endif /* U_HIDE_INTERNAL_API */ |
374ca955 A |
174 | |
175 | U_NAMESPACE_END | |
176 | #endif | |
177 |