summaryrefslogtreecommitdiff
path: root/android_icu4j/src/main/java/android/icu/impl/number/Modifier.java
diff options
context:
space:
mode:
Diffstat (limited to 'android_icu4j/src/main/java/android/icu/impl/number/Modifier.java')
-rw-r--r--android_icu4j/src/main/java/android/icu/impl/number/Modifier.java40
1 files changed, 39 insertions, 1 deletions
diff --git a/android_icu4j/src/main/java/android/icu/impl/number/Modifier.java b/android_icu4j/src/main/java/android/icu/impl/number/Modifier.java
index db6c27d60..08a415690 100644
--- a/android_icu4j/src/main/java/android/icu/impl/number/Modifier.java
+++ b/android_icu4j/src/main/java/android/icu/impl/number/Modifier.java
@@ -26,6 +26,7 @@ public interface Modifier {
POS;
static final int COUNT = Signum.values().length;
+ public static final Signum[] VALUES = Signum.values();
};
/**
@@ -87,8 +88,45 @@ public interface Modifier {
public Parameters getParameters();
/**
+ * Returns whether this Modifier equals another Modifier.
+ */
+ public boolean strictEquals(Modifier other);
+
+ /**
* Returns whether this Modifier is *semantically equivalent* to the other Modifier;
* in many cases, this is the same as equal, but parameters should be ignored.
*/
- public boolean semanticallyEquivalent(Modifier other);
+ default boolean semanticallyEquivalent(Modifier other) {
+ Parameters paramsThis = this.getParameters();
+ Parameters paramsOther = other.getParameters();
+ if (paramsThis == null && paramsOther == null) {
+ return this.strictEquals(other);
+ } else if (paramsThis == null || paramsOther == null) {
+ return false;
+ } else if (paramsThis.obj == null && paramsOther.obj == null) {
+ return this.strictEquals(other);
+ } else if (paramsThis.obj == null || paramsOther.obj == null) {
+ return false;
+ }
+ for (Signum signum : Signum.VALUES) {
+ for (StandardPlural plural : StandardPlural.VALUES) {
+ Modifier mod1 = paramsThis.obj.getModifier(signum, plural);
+ Modifier mod2 = paramsOther.obj.getModifier(signum, plural);
+ if (mod1 == mod2) {
+ // Equal pointers
+ continue;
+ } else if (mod1 == null || mod2 == null) {
+ // One pointer is null but not the other
+ return false;
+ } else if (!mod1.strictEquals(mod2)) {
+ // The modifiers are NOT equivalent
+ return false;
+ } else {
+ // The modifiers are equivalent
+ continue;
+ }
+ }
+ }
+ return true;
+ }
}