]> granicus.if.org Git - icu/commitdiff
ICU-21076 Delete unneeded MeasureUnit data & code
authorHugo van der Merwe <17109322+hugovdm@users.noreply.github.com>
Tue, 4 Aug 2020 11:39:14 +0000 (13:39 +0200)
committerHugo van der Merwe <17109322+hugovdm@users.noreply.github.com>
Tue, 4 Aug 2020 23:48:32 +0000 (01:48 +0200)
icu4c/source/i18n/measunit.cpp
icu4c/source/i18n/unicode/measunit.h
icu4c/source/test/intltest/numfmtst.cpp

index 4edf130b7e97ccafb15a18aefa08bf5a78ecc909..8614f914d34e0fe40f0862ca01f7c023342f3566 100644 (file)
@@ -34,8 +34,9 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(MeasureUnit)
 // http://site.icu-project.org/design/formatting/measureformat/updating-measure-unit
 //
 // Start generated code
+// TODO(ICU-21076): improve how this generated code is produced.
 
-
+// Maps from Type ID to offset in gSubTypes.
 static const int32_t gOffsets[] = {
     0,
     2,
@@ -63,32 +64,36 @@ static const int32_t gOffsets[] = {
     474
 };
 
-static const int32_t gIndexes[] = {
-    0,
-    2,
-    7,
-    17,
-    25,
-    29,
-    29,
-    40,
-    56,
-    60,
-    69,
-    71,
-    75,
-    82,
-    103,
-    105,
-    119,
-    122,
-    128,
-    138,
-    142,
-    146,
-    148,
-    175
-};
+// TODO: FIX CODE GENERATION - leaving this here but commented-out to make it
+// clear that we no longer want this array. We needed it for only one thing: efficient checking of "currency".
+//
+// static const int32_t gIndexes[] = {
+//     0,
+//     2,
+//     7,
+//     17,
+//     25,
+//     29,
+//     29,
+//     40,
+//     56,
+//     60,
+//     69,
+//     71,
+//     75,
+//     82,
+//     103,
+//     105,
+//     119,
+//     122,
+//     128,
+//     138,
+//     142,
+//     146,
+//     148,
+//     175
+// };
+static const int32_t kCurrencyOffset = 5;
 
 // Must be sorted alphabetically.
 static const char * const gTypes[] = {
@@ -2107,10 +2112,6 @@ UBool MeasureUnit::operator==(const UObject& other) const {
     return uprv_strcmp(getIdentifier(), rhs.getIdentifier()) == 0;
 }
 
-int32_t MeasureUnit::getIndex() const {
-    return gIndexes[fTypeId] + fSubTypeId;
-}
-
 int32_t MeasureUnit::getAvailable(
         MeasureUnit *dest,
         int32_t destCapacity,
@@ -2173,26 +2174,12 @@ StringEnumeration* MeasureUnit::getAvailableTypes(UErrorCode &errorCode) {
     return result;
 }
 
-int32_t MeasureUnit::getIndexCount() {
-    return gIndexes[UPRV_LENGTHOF(gIndexes) - 1];
-}
-
-int32_t MeasureUnit::internalGetIndexForTypeAndSubtype(const char *type, const char *subtype) {
-    int32_t t = binarySearch(gTypes, 0, UPRV_LENGTHOF(gTypes), type);
-    if (t < 0) {
-        return t;
-    }
-    int32_t st = binarySearch(gSubTypes, gOffsets[t], gOffsets[t + 1], subtype);
-    if (st < 0) {
-        return st;
-    }
-    return gIndexes[t] + st - gOffsets[t];
-}
-
 bool MeasureUnit::findBySubType(StringPiece subType, MeasureUnit* output) {
     for (int32_t t = 0; t < UPRV_LENGTHOF(gOffsets) - 1; t++) {
+        // Ensure kCurrencyOffset is set correctly
+        U_ASSERT(uprv_strcmp(gTypes[kCurrencyOffset], "currency") == 0);
         // Skip currency units
-        if (gIndexes[t] == gIndexes[t + 1]) {
+        if (t == kCurrencyOffset) {
             continue;
         }
         int32_t st = binarySearch(gSubTypes, gOffsets[t], gOffsets[t + 1], subType);
index e240092e305de46f1174ff5e8c0169b773b22c0d..310e4ed40056231cf6e10b69e25788a9c12b053f 100644 (file)
@@ -540,26 +540,10 @@ class U_I18N_API MeasureUnit: public UObject {
 #ifndef U_HIDE_INTERNAL_API
     /**
      * ICU use only.
-     * Returns associated array index for this measure unit. Only valid for
-     * non-currency measure units.
+     * Returns associated array index for this measure unit.
      * @internal
      */
-    int32_t getIndex() const;
-
-    /**
-     * ICU use only.
-     * Returns maximum value from getIndex plus 1.
-     * @internal
-     */
-    static int32_t getIndexCount();
-
-    /**
-     * ICU use only.
-     * @return the unit.getIndex() of the unit which has this unit.getType() and unit.getSubtype(),
-     *         or a negative value if there is no such unit
-     * @internal
-     */
-    static int32_t internalGetIndexForTypeAndSubtype(const char *type, const char *subtype);
+    int32_t getOffset() const;
 
     /**
      * ICU use only.
@@ -3393,7 +3377,6 @@ private:
     MeasureUnit(int32_t typeId, int32_t subTypeId);
     MeasureUnit(MeasureUnitImpl&& impl);
     void setTo(int32_t typeId, int32_t subTypeId);
-    int32_t getOffset() const;
     static MeasureUnit *create(int typeId, int subTypeId, UErrorCode &status);
 
     /**
index cd06f6029b2d7674e3870166043be321a188aad4..b1eb796bc1e97e67e363a0317d3e0d77eb513394 100644 (file)
@@ -2270,12 +2270,12 @@ void NumberFormatTest::TestCurrencyUnit(void){
     }
     CurrencyUnit bad(BAD, ec);
     assertSuccess("CurrencyUnit", ec);
-    if (cu.getIndex() == bad.getIndex()) {
+    if (cu.getOffset() == bad.getOffset()) {
         errln("Indexes of different currencies should differ.");
     }
     CurrencyUnit bad2(BAD2, ec);
     assertSuccess("CurrencyUnit", ec);
-    if (bad2.getIndex() != bad.getIndex()) {
+    if (bad2.getOffset() != bad.getOffset()) {
         errln("Indexes of unrecognized currencies should be the same.");
     }
     if (bad == bad2) {