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