• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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