1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *
385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *
5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "layout/LETypes.h"
8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "layout/loengine.h"
9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "layout/plruns.h"
10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/locid.h"
12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "layout/LayoutEngine.h"
14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "layout/RunArrays.h"
15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_USE
17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI pl_fontRuns * U_EXPORT2
19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_openFontRuns(const le_font **fonts,
20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                const le_int32 *limits,
21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                le_int32 count)
22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return (pl_fontRuns *) new FontRuns((const LEFontInstance **) fonts, limits, count);
24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI pl_fontRuns * U_EXPORT2
27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_openEmptyFontRuns(le_int32 initialCapacity)
28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return (pl_fontRuns *) new FontRuns(initialCapacity);
30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI void U_EXPORT2
33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_closeFontRuns(pl_fontRuns *fontRuns)
34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    FontRuns *fr = (FontRuns *) fontRuns;
36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete fr;
38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI le_int32 U_EXPORT2
41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getFontRunCount(const pl_fontRuns *fontRuns)
42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const FontRuns *fr = (const FontRuns *) fontRuns;
44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (fr == NULL) {
46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return -1;
47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return fr->getCount();
50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI void U_EXPORT2
53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_resetFontRuns(pl_fontRuns *fontRuns)
54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    FontRuns *fr = (FontRuns *) fontRuns;
56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (fr != NULL) {
58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        fr->reset();
59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI le_int32 U_EXPORT2
63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getFontRunLastLimit(const pl_fontRuns *fontRuns)
64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const FontRuns *fr = (const FontRuns *) fontRuns;
66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (fr == NULL) {
68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return -1;
69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return fr->getLimit();
72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI le_int32 U_EXPORT2
75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getFontRunLimit(const pl_fontRuns *fontRuns,
76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                   le_int32 run)
77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const FontRuns *fr = (const FontRuns *) fontRuns;
79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (fr == NULL) {
81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return -1;
82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return fr->getLimit(run);
85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI const le_font * U_EXPORT2
88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getFontRunFont(const pl_fontRuns *fontRuns,
89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    le_int32 run)
90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const FontRuns *fr = (const FontRuns *) fontRuns;
92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (fr == NULL) {
94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return NULL;
95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return (const le_font *) fr->getFont(run);
98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI le_int32 U_EXPORT2
101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_addFontRun(pl_fontRuns *fontRuns,
102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru              const le_font *font,
103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru              le_int32 limit)
104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    FontRuns *fr = (FontRuns *) fontRuns;
106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (fr == NULL) {
108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return -1;
109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return fr->add((const LEFontInstance *) font, limit);
112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI pl_valueRuns * U_EXPORT2
115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_openValueRuns(const le_int32 *values,
116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                 const le_int32 *limits,
117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                 le_int32 count)
118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return (pl_valueRuns *) new ValueRuns(values, limits, count);
120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI pl_valueRuns * U_EXPORT2
123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_openEmptyValueRuns(le_int32 initialCapacity)
124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return (pl_valueRuns *) new ValueRuns(initialCapacity);
126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI void U_EXPORT2
129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_closeValueRuns(pl_valueRuns *valueRuns)
130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ValueRuns *vr = (ValueRuns *) valueRuns;
132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete vr;
134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI le_int32 U_EXPORT2
137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getValueRunCount(const pl_valueRuns *valueRuns)
138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const ValueRuns *vr = (const ValueRuns *) valueRuns;
140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (vr == NULL) {
142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return -1;
143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return vr->getCount();
146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI void U_EXPORT2
149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_resetValueRuns(pl_valueRuns *valueRuns)
150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ValueRuns *vr = (ValueRuns *) valueRuns;
152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (vr != NULL) {
154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        vr->reset();
155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI le_int32 U_EXPORT2
159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getValueRunLastLimit(const pl_valueRuns *valueRuns)
160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const ValueRuns *vr = (const ValueRuns *) valueRuns;
162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (vr == NULL) {
164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return -1;
165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return vr->getLimit();
168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI le_int32 U_EXPORT2
171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getValueRunLimit(const pl_valueRuns *valueRuns,
172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    le_int32 run)
173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const ValueRuns *vr = (const ValueRuns *) valueRuns;
175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (vr == NULL) {
177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return -1;
178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return vr->getLimit(run);
181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI le_int32 U_EXPORT2
184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getValueRunValue(const pl_valueRuns *valueRuns,
185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                     le_int32 run)
186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const ValueRuns *vr = (const ValueRuns *) valueRuns;
188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (vr == NULL) {
190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return -1;
191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return vr->getValue(run);
194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI le_int32 U_EXPORT2
197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_addValueRun(pl_valueRuns *valueRuns,
198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru               le_int32 value,
199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru               le_int32 limit)
200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ValueRuns *vr = (ValueRuns *) valueRuns;
202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
203ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (vr == NULL) {
204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return -1;
205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return vr->add(value, limit);
208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_BEGIN
211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass ULocRuns : public LocaleRuns
212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic:
214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Construct a <code>LocaleRuns</code> object from pre-existing arrays of locales
216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * and limit indices.
217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param locales is the address of an array of locale name strings. This array,
219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *                and the <code>Locale</code> objects to which it points, must remain valid until
220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *                the <code>LocaleRuns</code> object is destroyed.
221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param limits is the address of an array of limit indices. This array must remain valid until the
223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *               <code>LocaleRuns</code> object is destroyed.
224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param count is the number of entries in the two arrays.
226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @draft ICU 3.8
228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ULocRuns(const char **locales, const le_int32 *limits, le_int32 count);
230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Construct an empty <code>LoIDRuns</code> object. Clients can add locale and limit
233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * indices arrays using the <code>add</code> method.
234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param initialCapacity is the initial size of the locale and limit indices arrays. If
236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *        this value is zero, no arrays will be allocated.
237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @see add
239ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @draft ICU 3.8
241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ULocRuns(le_int32 initialCapacity);
243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
244ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
245ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * The destructor; virtual so that subclass destructors are invoked as well.
246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
247ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @draft ICU 3.8
248ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual ~ULocRuns();
250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
252ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Get the name of the locale assoicated with the given run
253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * of text. Use <code>RunArray::getLimit(run)</code> to get the corresponding
254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * limit index.
255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param run is the index into the font and limit indices arrays.
257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @return the locale name associated with the given text run.
259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @see RunArray::getLimit
261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @draft ICU 3.8
263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const char *getLocaleName(le_int32 run) const;
265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
266ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
267ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Add a <code>Locale</code> and limit index pair to the data arrays and return
268ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * the run index where the data was stored. This  method calls
269ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * <code>RunArray::add(limit)</code> which will create or grow the arrays as needed.
270ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
271ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * If the <code>ULocRuns</code> object was created with a client-supplied
272ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * locale and limit indices arrays, this method will return a run index of -1.
273ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
274ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Subclasses should not override this method. Rather they should provide a new <code>add</code>
275ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * method which takes a locale name and a limit index along with whatever other data they implement.
276ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * The new <code>add</code> method should first call this method to grow the font and limit indices
277ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * arrays, and use the returned run index to store data their own arrays.
278ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
279ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param locale is the name of the locale to add. This object must remain valid
280ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *               until the <code>ULocRuns</code> object is destroyed.
281ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
282ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param limit is the limit index to add
283ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
284ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @return the run index where the locale and limit index were stored, or -1 if the data cannot be stored.
285ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
286ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @draft ICU 3.8
287ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
288ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    le_int32 add(const char *locale, le_int32 limit);
289ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
290ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
291ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * ICU "poor man's RTTI", returns a UClassID for this class.
292ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
293ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @draft ICU 3.8
294ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
295ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    static inline UClassID getStaticClassID();
296ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
297ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
298ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * ICU "poor man's RTTI", returns a UClassID for the actual class.
299ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
300ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @draft ICU 3.8
301ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
302ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual inline UClassID getDynamicClassID() const;
303ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
304ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruprotected:
305ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual void init(le_int32 capacity);
306ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual void grow(le_int32 capacity);
307ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
308ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruprivate:
309ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
310ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    inline ULocRuns();
311ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    inline ULocRuns(const ULocRuns &other);
312ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    inline ULocRuns &operator=(const ULocRuns & /*other*/) { return *this; };
313ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const char **fLocaleNames;
314ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    Locale **fLocalesCopy;
315ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
316ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
317ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline ULocRuns::ULocRuns()
318ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    : LocaleRuns(0), fLocaleNames(NULL)
319ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
320ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // nothing else to do...
321ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
322ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
323ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline ULocRuns::ULocRuns(const ULocRuns & /*other*/)
324ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    : LocaleRuns(0), fLocaleNames(NULL)
325ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
326ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // nothing else to do...
327ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
328ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
329ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const Locale **getLocales(const char **localeNames, le_int32 count)
330ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
331ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    Locale **locales = LE_NEW_ARRAY(Locale *, count);
332ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
333ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    for (int i = 0; i < count; i += 1) {
334ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        locales[i] = new Locale(Locale::createFromName(localeNames[i]));
335ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
336ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
337ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return (const Locale **) locales;
338ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
339ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
340ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruULocRuns::ULocRuns(const char **locales, const le_int32 *limits, le_int32 count)
341ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    : LocaleRuns(getLocales(locales, count), limits, count), fLocaleNames(locales)
342ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
343ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // nothing else to do...
344ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
345ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
346ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruULocRuns::ULocRuns(le_int32 initialCapacity)
347ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    : LocaleRuns(initialCapacity), fLocaleNames(NULL)
348ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
349ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(initialCapacity > 0) {
350ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        fLocaleNames = LE_NEW_ARRAY(const char *, initialCapacity);
351ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
352ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
353ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
354ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruULocRuns::~ULocRuns()
355ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
356ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    le_int32 count = getCount();
357ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
358ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    for(int i = 0; i < count; i += 1) {
359ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete fLocales[i];
360ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
361ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
362ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (fClientArrays) {
363ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        LE_DELETE_ARRAY(fLocales);
364ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        fLocales = NULL;
365ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } else {
366ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        LE_DELETE_ARRAY(fLocaleNames);
367ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        fLocaleNames = NULL;
368ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
369ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
370ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
371ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid ULocRuns::init(le_int32 capacity)
372ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
373ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    LocaleRuns::init(capacity);
374ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    fLocaleNames = LE_NEW_ARRAY(const char *, capacity);
375ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
376ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
377ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid ULocRuns::grow(le_int32 capacity)
378ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
37985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    LocaleRuns::grow(capacity);
380ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    fLocaleNames = (const char **) LE_GROW_ARRAY(fLocaleNames, capacity);
381ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
382ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
383ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querule_int32 ULocRuns::add(const char *locale, le_int32 limit)
384ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
385ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    Locale *loc = new Locale(Locale::createFromName(locale));
386ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    le_int32 index = LocaleRuns::add(loc, limit);
387ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
388ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (index >= 0) {
389ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        char **localeNames = (char **) fLocaleNames;
390ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
391ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        localeNames[index] = (char *) locale;
392ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
393ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
394ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return index;
395ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
396ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
397ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst char *ULocRuns::getLocaleName(le_int32 run) const
398ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
399ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (run < 0 || run >= getCount()) {
400ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return NULL;
401ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
402ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
403ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return fLocaleNames[run];
404ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
405ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUOBJECT_DEFINE_RTTI_IMPLEMENTATION(ULocRuns)
406ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_END
407ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
408ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI pl_localeRuns * U_EXPORT2
409ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_openLocaleRuns(const char **locales,
410ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                  const le_int32 *limits,
411ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                  le_int32 count)
412ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
413ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return (pl_localeRuns *) new ULocRuns(locales, limits, count);
414ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
415ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
416ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI pl_localeRuns * U_EXPORT2
417ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_openEmptyLocaleRuns(le_int32 initialCapacity)
418ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
419ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return (pl_localeRuns *) new ULocRuns(initialCapacity);
420ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
421ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
422ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI void U_EXPORT2
423ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_closeLocaleRuns(pl_localeRuns *localeRuns)
424ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
425ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ULocRuns *lr = (ULocRuns *) localeRuns;
426ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
427ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete lr;
428ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
429ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
430ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI le_int32 U_EXPORT2
431ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getLocaleRunCount(const pl_localeRuns *localeRuns)
432ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
433ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const ULocRuns *lr = (const ULocRuns *) localeRuns;
434ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
435ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (lr == NULL) {
436ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return -1;
437ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
438ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
439ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return lr->getCount();
440ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
441ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
442ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI void U_EXPORT2
443ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_resetLocaleRuns(pl_localeRuns *localeRuns)
444ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
445ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ULocRuns *lr = (ULocRuns *) localeRuns;
446ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
447ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (lr != NULL) {
448ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        lr->reset();
449ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
450ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
451ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
452ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI le_int32 U_EXPORT2
453ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getLocaleRunLastLimit(const pl_localeRuns *localeRuns)
454ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
455ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const ULocRuns *lr = (const ULocRuns *) localeRuns;
456ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
457ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (lr == NULL) {
458ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return -1;
459ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
460ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
461ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return lr->getLimit();
462ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
463ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
464ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI le_int32 U_EXPORT2
465ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getLocaleRunLimit(const pl_localeRuns *localeRuns,
466ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                     le_int32 run)
467ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
468ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const ULocRuns *lr = (const ULocRuns *) localeRuns;
469ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
470ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (lr == NULL) {
471ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return -1;
472ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
473ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
474ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return lr->getLimit(run);
475ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
476ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
477ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI const char * U_EXPORT2
478ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getLocaleRunLocale(const pl_localeRuns *localeRuns,
479ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                      le_int32 run)
480ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
481ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const ULocRuns *lr = (const ULocRuns *) localeRuns;
482ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
483ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (lr == NULL) {
484ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return NULL;
485ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
486ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
487ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return lr->getLocaleName(run);
488ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
489ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
490ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI le_int32 U_EXPORT2
491ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_addLocaleRun(pl_localeRuns *localeRuns,
492ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                const char *locale,
493ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                le_int32 limit)
494ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
495ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ULocRuns *lr = (ULocRuns *) localeRuns;
496ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
497ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (lr == NULL) {
498ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return -1;
499ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
500ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
501ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return lr->add(locale, limit);
502ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
503