| OLD | NEW |
| 1 /* | 1 /* |
| 2 ******************************************************************************* | 2 ******************************************************************************* |
| 3 * Copyright (C) 1997-2014, International Business Machines Corporation and * | 3 * Copyright (C) 1997-2015, International Business Machines Corporation and * |
| 4 * others. All Rights Reserved. * | 4 * others. All Rights Reserved. * |
| 5 ******************************************************************************* | 5 ******************************************************************************* |
| 6 * | 6 * |
| 7 * File COMPACTDECIMALFORMAT.CPP | 7 * File COMPACTDECIMALFORMAT.CPP |
| 8 * | 8 * |
| 9 ******************************************************************************** | 9 ******************************************************************************** |
| 10 */ | 10 */ |
| 11 #include "unicode/utypes.h" | 11 #include "unicode/utypes.h" |
| 12 | 12 |
| 13 #if !UCONFIG_NO_FORMATTING | 13 #if !UCONFIG_NO_FORMATTING |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 UBool | 235 UBool |
| 236 CompactDecimalFormat::eqHelper(const CompactDecimalFormat& that) const { | 236 CompactDecimalFormat::eqHelper(const CompactDecimalFormat& that) const { |
| 237 return uhash_equals(_unitsByVariant, that._unitsByVariant) && divisors_equal(_
divisors, that._divisors) && (*_pluralRules == *that._pluralRules); | 237 return uhash_equals(_unitsByVariant, that._unitsByVariant) && divisors_equal(_
divisors, that._divisors) && (*_pluralRules == *that._pluralRules); |
| 238 } | 238 } |
| 239 | 239 |
| 240 UnicodeString& | 240 UnicodeString& |
| 241 CompactDecimalFormat::format( | 241 CompactDecimalFormat::format( |
| 242 double number, | 242 double number, |
| 243 UnicodeString& appendTo, | 243 UnicodeString& appendTo, |
| 244 FieldPosition& pos) const { | 244 FieldPosition& pos) const { |
| 245 UErrorCode status = U_ZERO_ERROR; |
| 246 return format(number, appendTo, pos, status); |
| 247 } |
| 248 |
| 249 UnicodeString& |
| 250 CompactDecimalFormat::format( |
| 251 double number, |
| 252 UnicodeString& appendTo, |
| 253 FieldPosition& pos, |
| 254 UErrorCode &status) const { |
| 255 if (U_FAILURE(status)) { |
| 256 return appendTo; |
| 257 } |
| 245 DigitList orig, rounded; | 258 DigitList orig, rounded; |
| 246 orig.set(number); | 259 orig.set(number); |
| 247 UBool isNegative; | 260 UBool isNegative; |
| 248 UErrorCode status = U_ZERO_ERROR; | |
| 249 _round(orig, rounded, isNegative, status); | 261 _round(orig, rounded, isNegative, status); |
| 250 if (U_FAILURE(status)) { | 262 if (U_FAILURE(status)) { |
| 251 return appendTo; | 263 return appendTo; |
| 252 } | 264 } |
| 253 double roundedDouble = rounded.getDouble(); | 265 double roundedDouble = rounded.getDouble(); |
| 254 if (isNegative) { | 266 if (isNegative) { |
| 255 roundedDouble = -roundedDouble; | 267 roundedDouble = -roundedDouble; |
| 256 } | 268 } |
| 257 int32_t baseIdx = computeLog10(roundedDouble, TRUE); | 269 int32_t baseIdx = computeLog10(roundedDouble, TRUE); |
| 258 double numberToFormat = roundedDouble / _divisors[baseIdx]; | 270 double numberToFormat = roundedDouble / _divisors[baseIdx]; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 272 double /* number */, | 284 double /* number */, |
| 273 UnicodeString& appendTo, | 285 UnicodeString& appendTo, |
| 274 FieldPositionIterator* /* posIter */, | 286 FieldPositionIterator* /* posIter */, |
| 275 UErrorCode& status) const { | 287 UErrorCode& status) const { |
| 276 status = U_UNSUPPORTED_ERROR; | 288 status = U_UNSUPPORTED_ERROR; |
| 277 return appendTo; | 289 return appendTo; |
| 278 } | 290 } |
| 279 | 291 |
| 280 UnicodeString& | 292 UnicodeString& |
| 281 CompactDecimalFormat::format( | 293 CompactDecimalFormat::format( |
| 294 int32_t number, |
| 295 UnicodeString& appendTo, |
| 296 FieldPosition& pos) const { |
| 297 return format((double) number, appendTo, pos); |
| 298 } |
| 299 |
| 300 UnicodeString& |
| 301 CompactDecimalFormat::format( |
| 302 int32_t number, |
| 303 UnicodeString& appendTo, |
| 304 FieldPosition& pos, |
| 305 UErrorCode &status) const { |
| 306 return format((double) number, appendTo, pos, status); |
| 307 } |
| 308 |
| 309 UnicodeString& |
| 310 CompactDecimalFormat::format( |
| 311 int32_t /* number */, |
| 312 UnicodeString& appendTo, |
| 313 FieldPositionIterator* /* posIter */, |
| 314 UErrorCode& status) const { |
| 315 status = U_UNSUPPORTED_ERROR; |
| 316 return appendTo; |
| 317 } |
| 318 |
| 319 UnicodeString& |
| 320 CompactDecimalFormat::format( |
| 282 int64_t number, | 321 int64_t number, |
| 283 UnicodeString& appendTo, | 322 UnicodeString& appendTo, |
| 284 FieldPosition& pos) const { | 323 FieldPosition& pos) const { |
| 285 return format((double) number, appendTo, pos); | 324 return format((double) number, appendTo, pos); |
| 286 } | 325 } |
| 287 | 326 |
| 288 UnicodeString& | 327 UnicodeString& |
| 289 CompactDecimalFormat::format( | 328 CompactDecimalFormat::format( |
| 329 int64_t number, |
| 330 UnicodeString& appendTo, |
| 331 FieldPosition& pos, |
| 332 UErrorCode &status) const { |
| 333 return format((double) number, appendTo, pos, status); |
| 334 } |
| 335 |
| 336 UnicodeString& |
| 337 CompactDecimalFormat::format( |
| 290 int64_t /* number */, | 338 int64_t /* number */, |
| 291 UnicodeString& appendTo, | 339 UnicodeString& appendTo, |
| 292 FieldPositionIterator* /* posIter */, | 340 FieldPositionIterator* /* posIter */, |
| 293 UErrorCode& status) const { | 341 UErrorCode& status) const { |
| 294 status = U_UNSUPPORTED_ERROR; | 342 status = U_UNSUPPORTED_ERROR; |
| 295 return appendTo; | 343 return appendTo; |
| 296 } | 344 } |
| 297 | 345 |
| 298 UnicodeString& | 346 UnicodeString& |
| 299 CompactDecimalFormat::format( | 347 CompactDecimalFormat::format( |
| (...skipping 561 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 861 for (int32_t i = 0; i < MAX_DIGITS; ++i) { | 909 for (int32_t i = 0; i < MAX_DIGITS; ++i) { |
| 862 if (!otherUnits[i].isSet()) { | 910 if (!otherUnits[i].isSet()) { |
| 863 result->divisors[i] = lastDivisor; | 911 result->divisors[i] = lastDivisor; |
| 864 definedInCLDR[i] = FALSE; | 912 definedInCLDR[i] = FALSE; |
| 865 } else { | 913 } else { |
| 866 lastDivisor = result->divisors[i]; | 914 lastDivisor = result->divisors[i]; |
| 867 definedInCLDR[i] = TRUE; | 915 definedInCLDR[i] = TRUE; |
| 868 } | 916 } |
| 869 } | 917 } |
| 870 // Iterate over each variant. | 918 // Iterate over each variant. |
| 871 int32_t pos = -1; | 919 int32_t pos = UHASH_FIRST; |
| 872 const UHashElement* element = uhash_nextElement(result->unitsByVariant, &pos); | 920 const UHashElement* element = uhash_nextElement(result->unitsByVariant, &pos); |
| 873 for (;element != NULL; element = uhash_nextElement(result->unitsByVariant, &po
s)) { | 921 for (;element != NULL; element = uhash_nextElement(result->unitsByVariant, &po
s)) { |
| 874 CDFUnit* units = (CDFUnit*) element->value.pointer; | 922 CDFUnit* units = (CDFUnit*) element->value.pointer; |
| 875 for (int32_t i = 0; i < MAX_DIGITS; ++i) { | 923 for (int32_t i = 0; i < MAX_DIGITS; ++i) { |
| 876 if (definedInCLDR[i]) { | 924 if (definedInCLDR[i]) { |
| 877 if (!units[i].isSet()) { | 925 if (!units[i].isSet()) { |
| 878 units[i] = otherUnits[i]; | 926 units[i] = otherUnits[i]; |
| 879 } | 927 } |
| 880 } else { | 928 } else { |
| 881 if (i == 0) { | 929 if (i == 0) { |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 942 cdfUnit = (const CDFUnit*) uhash_get(table, cvariant.data()); | 990 cdfUnit = (const CDFUnit*) uhash_get(table, cvariant.data()); |
| 943 } | 991 } |
| 944 if (cdfUnit == NULL) { | 992 if (cdfUnit == NULL) { |
| 945 cdfUnit = (const CDFUnit*) uhash_get(table, gOther); | 993 cdfUnit = (const CDFUnit*) uhash_get(table, gOther); |
| 946 } | 994 } |
| 947 return &cdfUnit[log10Value]; | 995 return &cdfUnit[log10Value]; |
| 948 } | 996 } |
| 949 | 997 |
| 950 U_NAMESPACE_END | 998 U_NAMESPACE_END |
| 951 #endif | 999 #endif |
| OLD | NEW |