1 /* GENERATED SOURCE. DO NOT MODIFY. */ 2 // © 2018 and later: Unicode, Inc. and others. 3 // License & terms of use: http://www.unicode.org/copyright.html#License 4 package ohos.global.icu.impl.number.range; 5 6 import java.util.MissingResourceException; 7 8 import ohos.global.icu.impl.ICUData; 9 import ohos.global.icu.impl.ICUResourceBundle; 10 import ohos.global.icu.impl.StandardPlural; 11 import ohos.global.icu.impl.UResource; 12 import ohos.global.icu.util.ULocale; 13 import ohos.global.icu.util.UResourceBundle; 14 15 /** 16 * @author sffc 17 * @hide exposed on OHOS 18 * 19 */ 20 public class StandardPluralRanges { 21 22 StandardPlural[] flatTriples; 23 int numTriples = 0; 24 25 //////////////////// 26 27 private static final class PluralRangesDataSink extends UResource.Sink { 28 29 StandardPluralRanges output; 30 PluralRangesDataSink(StandardPluralRanges output)31 PluralRangesDataSink(StandardPluralRanges output) { 32 this.output = output; 33 } 34 35 @Override put(UResource.Key key, UResource.Value value, boolean noFallback)36 public void put(UResource.Key key, UResource.Value value, boolean noFallback) { 37 UResource.Array entriesArray = value.getArray(); 38 output.setCapacity(entriesArray.getSize()); 39 for (int i = 0; entriesArray.getValue(i, value); ++i) { 40 UResource.Array pluralFormsArray = value.getArray(); 41 pluralFormsArray.getValue(0, value); 42 StandardPlural first = StandardPlural.fromString(value.getString()); 43 pluralFormsArray.getValue(1, value); 44 StandardPlural second = StandardPlural.fromString(value.getString()); 45 pluralFormsArray.getValue(2, value); 46 StandardPlural result = StandardPlural.fromString(value.getString()); 47 output.addPluralRange(first, second, result); 48 } 49 } 50 } 51 getPluralRangesData( ULocale locale, StandardPluralRanges out)52 private static void getPluralRangesData( 53 ULocale locale, 54 StandardPluralRanges out) { 55 StringBuilder sb = new StringBuilder(); 56 ICUResourceBundle resource; 57 resource = (ICUResourceBundle) UResourceBundle.getBundleInstance(ICUData.ICU_BASE_NAME, "pluralRanges"); 58 sb.append("locales/"); 59 sb.append(locale.getLanguage()); 60 String key = sb.toString(); 61 String set; 62 try { 63 set = resource.getStringWithFallback(key); 64 } catch (MissingResourceException e) { 65 // Not all languages are covered: fail gracefully 66 return; 67 } 68 69 sb.setLength(0); 70 sb.append("rules/"); 71 sb.append(set); 72 key = sb.toString(); 73 PluralRangesDataSink sink = new PluralRangesDataSink(out); 74 resource.getAllItemsWithFallback(key, sink); 75 } 76 77 //////////////////// 78 StandardPluralRanges(ULocale locale)79 public StandardPluralRanges(ULocale locale) { 80 getPluralRangesData(locale, this); 81 } 82 83 /** Used for data loading. */ addPluralRange(StandardPlural first, StandardPlural second, StandardPlural result)84 private void addPluralRange(StandardPlural first, StandardPlural second, StandardPlural result) { 85 flatTriples[3 * numTriples] = first; 86 flatTriples[3 * numTriples + 1] = second; 87 flatTriples[3 * numTriples + 2] = result; 88 numTriples++; 89 } 90 91 /** Used for data loading. */ setCapacity(int length)92 private void setCapacity(int length) { 93 flatTriples = new StandardPlural[length*3]; 94 } 95 resolve(StandardPlural first, StandardPlural second)96 public StandardPlural resolve(StandardPlural first, StandardPlural second) { 97 for (int i = 0; i < numTriples; i++) { 98 if (first == flatTriples[3 * i] && second == flatTriples[3 * i + 1]) { 99 return flatTriples[3 * i + 2]; 100 } 101 } 102 // Default fallback 103 return StandardPlural.OTHER; 104 } 105 106 } 107