• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* GENERATED SOURCE. DO NOT MODIFY. */
2 // © 2017 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;
5 
6 import java.text.Format.Field;
7 import java.util.Arrays;
8 
9 import ohos.global.icu.impl.FormattedStringBuilder;
10 
11 /**
12  * An implementation of {@link Modifier} that allows for multiple types of fields in the same modifier.
13  * Constructed based on the contents of two {@link FormattedStringBuilder} instances (one for the prefix,
14  * one for the suffix).
15  * @hide exposed on OHOS
16  */
17 public class ConstantMultiFieldModifier implements Modifier {
18 
19     // NOTE: In Java, these are stored as array pointers. In C++, the FormattedStringBuilder is stored by
20     // value and is treated internally as immutable.
21     protected final char[] prefixChars;
22     protected final char[] suffixChars;
23     protected final Object[] prefixFields;
24     protected final Object[] suffixFields;
25     private final boolean overwrite;
26     private final boolean strong;
27 
28     // Parameters: used for number range formatting
29     private final Parameters parameters;
30 
ConstantMultiFieldModifier( FormattedStringBuilder prefix, FormattedStringBuilder suffix, boolean overwrite, boolean strong)31     public ConstantMultiFieldModifier(
32             FormattedStringBuilder prefix,
33             FormattedStringBuilder suffix,
34             boolean overwrite,
35             boolean strong) {
36         this(prefix, suffix, overwrite, strong, null);
37     }
38 
ConstantMultiFieldModifier( FormattedStringBuilder prefix, FormattedStringBuilder suffix, boolean overwrite, boolean strong, Parameters parameters)39     public ConstantMultiFieldModifier(
40             FormattedStringBuilder prefix,
41             FormattedStringBuilder suffix,
42             boolean overwrite,
43             boolean strong,
44             Parameters parameters) {
45         prefixChars = prefix.toCharArray();
46         suffixChars = suffix.toCharArray();
47         prefixFields = prefix.toFieldArray();
48         suffixFields = suffix.toFieldArray();
49         this.overwrite = overwrite;
50         this.strong = strong;
51         this.parameters = parameters;
52     }
53 
54     @Override
apply(FormattedStringBuilder output, int leftIndex, int rightIndex)55     public int apply(FormattedStringBuilder output, int leftIndex, int rightIndex) {
56         int length = output.insert(leftIndex, prefixChars, prefixFields);
57         if (overwrite) {
58             length += output.splice(leftIndex + length, rightIndex + length, "", 0, 0, null);
59         }
60         length += output.insert(rightIndex + length, suffixChars, suffixFields);
61         return length;
62     }
63 
64     @Override
getPrefixLength()65     public int getPrefixLength() {
66         return prefixChars.length;
67     }
68 
69     @Override
getCodePointCount()70     public int getCodePointCount() {
71         return Character.codePointCount(prefixChars, 0, prefixChars.length)
72                 + Character.codePointCount(suffixChars, 0, suffixChars.length);
73     }
74 
75     @Override
isStrong()76     public boolean isStrong() {
77         return strong;
78     }
79 
80     @Override
containsField(Field field)81     public boolean containsField(Field field) {
82         for (int i = 0; i < prefixFields.length; i++) {
83             if (prefixFields[i] == field) {
84                 return true;
85             }
86         }
87         for (int i = 0; i < suffixFields.length; i++) {
88             if (suffixFields[i] == field) {
89                 return true;
90             }
91         }
92         return false;
93     }
94 
95     @Override
getParameters()96     public Parameters getParameters() {
97         return parameters;
98     }
99 
100     @Override
semanticallyEquivalent(Modifier other)101     public boolean semanticallyEquivalent(Modifier other) {
102         if (!(other instanceof ConstantMultiFieldModifier)) {
103             return false;
104         }
105         ConstantMultiFieldModifier _other = (ConstantMultiFieldModifier) other;
106         if (parameters != null && _other.parameters != null && parameters.obj == _other.parameters.obj) {
107             return true;
108         }
109         return Arrays.equals(prefixChars, _other.prefixChars) && Arrays.equals(prefixFields, _other.prefixFields)
110                 && Arrays.equals(suffixChars, _other.suffixChars) && Arrays.equals(suffixFields, _other.suffixFields)
111                 && overwrite == _other.overwrite && strong == _other.strong;
112     }
113 
114     @Override
toString()115     public String toString() {
116         FormattedStringBuilder temp = new FormattedStringBuilder();
117         apply(temp, 0, 0);
118         int prefixLength = getPrefixLength();
119         return String.format("<ConstantMultiFieldModifier prefix:'%s' suffix:'%s'>",
120                 temp.subSequence(0, prefixLength),
121                 temp.subSequence(prefixLength, temp.length()));
122     }
123 }
124