16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ******************************************************************************* 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (C) 2009-2011, International Business Machines Corporation and 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ******************************************************************************* 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/currpinf.h" 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//#define CURRENCY_PLURAL_INFO_DEBUG 1 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef CURRENCY_PLURAL_INFO_DEBUG 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <iostream> 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/locid.h" 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/plurrule.h" 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ures.h" 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/numsys.h" 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cstring.h" 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "hash.h" 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "uresimp.h" 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "ureslocs.h" 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar gNumberPatternSeparator = 0x3B; // ; 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CDECL_BEGIN 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal ICU 4.2 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool U_CALLCONV ValueComparator(UHashTok val1, UHashTok val2); 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUBool 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CALLCONV ValueComparator(UHashTok val1, UHashTok val2) { 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString* affix_1 = (UnicodeString*)val1.pointer; 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString* affix_2 = (UnicodeString*)val2.pointer; 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return *affix_1 == *affix_2; 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CDECL_END 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUOBJECT_DEFINE_RTTI_IMPLEMENTATION(CurrencyPluralInfo) 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar gDefaultCurrencyPluralPattern[] = {'0', '.', '#', '#', ' ', 0xA4, 0xA4, 0xA4, 0}; 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar gTripleCurrencySign[] = {0xA4, 0xA4, 0xA4, 0}; 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar gPluralCountOther[] = {0x6F, 0x74, 0x68, 0x65, 0x72, 0}; 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar gPart0[] = {0x7B, 0x30, 0x7D, 0}; 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar gPart1[] = {0x7B, 0x31, 0x7D, 0}; 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const char gNumberElementsTag[]="NumberElements"; 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const char gLatnTag[]="latn"; 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const char gPatternsTag[]="patterns"; 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const char gDecimalFormatTag[]="decimalFormat"; 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const char gCurrUnitPtnTag[]="CurrencyUnitPatterns"; 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo::CurrencyPluralInfo(UErrorCode& status) 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org: fPluralCountToCurrencyUnitPattern(NULL), 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fPluralRules(NULL), 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fLocale(NULL) { 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org initialize(Locale::getDefault(), status); 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo::CurrencyPluralInfo(const Locale& locale, UErrorCode& status) 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org: fPluralCountToCurrencyUnitPattern(NULL), 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fPluralRules(NULL), 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fLocale(NULL) { 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org initialize(locale, status); 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo::CurrencyPluralInfo(const CurrencyPluralInfo& info) 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org: UObject(info), 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fPluralCountToCurrencyUnitPattern(NULL), 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fPluralRules(NULL), 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fLocale(NULL) { 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *this = info; 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo& 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo::operator=(const CurrencyPluralInfo& info) { 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (this == &info) { 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return *this; 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org deleteHash(fPluralCountToCurrencyUnitPattern); 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fPluralCountToCurrencyUnitPattern = initHash(status); 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org copyHash(info.fPluralCountToCurrencyUnitPattern, 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fPluralCountToCurrencyUnitPattern, status); 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return *this; 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete fPluralRules; 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete fLocale; 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (info.fPluralRules) { 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fPluralRules = info.fPluralRules->clone(); 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fPluralRules = NULL; 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (info.fLocale) { 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fLocale = info.fLocale->clone(); 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fLocale = NULL; 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return *this; 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo::~CurrencyPluralInfo() { 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org deleteHash(fPluralCountToCurrencyUnitPattern); 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fPluralCountToCurrencyUnitPattern = NULL; 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete fPluralRules; 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete fLocale; 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fPluralRules = NULL; 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fLocale = NULL; 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUBool 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo::operator==(const CurrencyPluralInfo& info) const { 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef CURRENCY_PLURAL_INFO_DEBUG 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (*fPluralRules == *info.fPluralRules) { 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org std::cout << "same plural rules\n"; 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (*fLocale == *info.fLocale) { 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org std::cout << "same locale\n"; 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (fPluralCountToCurrencyUnitPattern->equals(*info.fPluralCountToCurrencyUnitPattern)) { 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org std::cout << "same pattern\n"; 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return *fPluralRules == *info.fPluralRules && 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *fLocale == *info.fLocale && 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fPluralCountToCurrencyUnitPattern->equals(*info.fPluralCountToCurrencyUnitPattern); 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo* 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo::clone() const { 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return new CurrencyPluralInfo(*this); 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgconst PluralRules* 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo::getPluralRules() const { 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return fPluralRules; 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString& 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo::getCurrencyPluralPattern(const UnicodeString& pluralCount, 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& result) const { 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString* currencyPluralPattern = 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (UnicodeString*)fPluralCountToCurrencyUnitPattern->get(pluralCount); 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (currencyPluralPattern == NULL) { 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // fall back to "other" 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pluralCount.compare(gPluralCountOther, 5)) { 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org currencyPluralPattern = 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (UnicodeString*)fPluralCountToCurrencyUnitPattern->get(UnicodeString(TRUE, gPluralCountOther, 5)); 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (currencyPluralPattern == NULL) { 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // no currencyUnitPatterns defined, 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // fallback to predefined defult. 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // This should never happen when ICU resource files are 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // available, since currencyUnitPattern of "other" is always 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // defined in root. 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = UnicodeString(gDefaultCurrencyPluralPattern); 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return result; 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = *currencyPluralPattern; 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return result; 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgconst Locale& 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo::getLocale() const { 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return *fLocale; 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo::setPluralRules(const UnicodeString& ruleDescription, 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode& status) { 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (fPluralRules) { 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete fPluralRules; 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fPluralRules = PluralRules::createRules(ruleDescription, status); 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo::setCurrencyPluralPattern(const UnicodeString& pluralCount, 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& pattern, 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode& status) { 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fPluralCountToCurrencyUnitPattern->put(pluralCount, new UnicodeString(pattern), status); 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo::setLocale(const Locale& loc, UErrorCode& status) { 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org initialize(loc, status); 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo::initialize(const Locale& loc, UErrorCode& status) { 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete fLocale; 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fLocale = loc.clone(); 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (fPluralRules) { 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete fPluralRules; 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fPluralRules = PluralRules::forLocale(loc, status); 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setupCurrencyPluralPattern(loc, status); 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo::setupCurrencyPluralPattern(const Locale& loc, UErrorCode& status) { 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (fPluralCountToCurrencyUnitPattern) { 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org deleteHash(fPluralCountToCurrencyUnitPattern); 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fPluralCountToCurrencyUnitPattern = initHash(status); 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NumberingSystem *ns = NumberingSystem::createInstance(loc,status); 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode ec = U_ZERO_ERROR; 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UResourceBundle *rb = ures_open(NULL, loc.getName(), &ec); 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UResourceBundle *numElements = ures_getByKeyWithFallback(rb, gNumberElementsTag, NULL, &ec); 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org rb = ures_getByKeyWithFallback(numElements, ns->getName(), rb, &ec); 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org rb = ures_getByKeyWithFallback(rb, gPatternsTag, rb, &ec); 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t ptnLen; 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar* numberStylePattern = ures_getStringByKeyWithFallback(rb, gDecimalFormatTag, &ptnLen, &ec); 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Fall back to "latn" if num sys specific pattern isn't there. 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( ec == U_MISSING_RESOURCE_ERROR && uprv_strcmp(ns->getName(),gLatnTag)) { 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ec = U_ZERO_ERROR; 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org rb = ures_getByKeyWithFallback(numElements, gLatnTag, rb, &ec); 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org rb = ures_getByKeyWithFallback(rb, gPatternsTag, rb, &ec); 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numberStylePattern = ures_getStringByKeyWithFallback(rb, gDecimalFormatTag, &ptnLen, &ec); 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t numberStylePatternLen = ptnLen; 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar* negNumberStylePattern = NULL; 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t negNumberStylePatternLen = 0; 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // TODO: Java 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // parse to check whether there is ";" separator in the numberStylePattern 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool hasSeparator = false; 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(ec)) { 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int32_t styleCharIndex = 0; styleCharIndex < ptnLen; ++styleCharIndex) { 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (numberStylePattern[styleCharIndex] == gNumberPatternSeparator) { 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org hasSeparator = true; 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // split the number style pattern into positive and negative 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org negNumberStylePattern = numberStylePattern + styleCharIndex + 1; 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org negNumberStylePatternLen = ptnLen - styleCharIndex - 1; 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numberStylePatternLen = styleCharIndex; 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ures_close(numElements); 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ures_close(rb); 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete ns; 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(ec)) { 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UResourceBundle *currRb = ures_open(U_ICUDATA_CURR, loc.getName(), &ec); 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UResourceBundle *currencyRes = ures_getByKeyWithFallback(currRb, gCurrUnitPtnTag, NULL, &ec); 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef CURRENCY_PLURAL_INFO_DEBUG 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org std::cout << "in set up\n"; 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org StringEnumeration* keywords = fPluralRules->getKeywords(ec); 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(ec)) { 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* pluralCount; 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while ((pluralCount = keywords->next(NULL, ec)) != NULL) { 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_SUCCESS(ec) ) { 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t ptnLen; 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode err = U_ZERO_ERROR; 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar* patternChars = ures_getStringByKeyWithFallback( 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org currencyRes, pluralCount, &ptnLen, &err); 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(err) && ptnLen > 0) { 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString* pattern = new UnicodeString(patternChars, ptnLen); 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef CURRENCY_PLURAL_INFO_DEBUG 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char result_1[1000]; 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern->extract(0, pattern->length(), result_1, "UTF-8"); 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org std::cout << "pluralCount: " << pluralCount << "; pattern: " << result_1 << "\n"; 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern->findAndReplace(UnicodeString(TRUE, gPart0, 3), 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString(numberStylePattern, numberStylePatternLen)); 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern->findAndReplace(UnicodeString(TRUE, gPart1, 3), UnicodeString(TRUE, gTripleCurrencySign, 3)); 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (hasSeparator) { 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString negPattern(patternChars, ptnLen); 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org negPattern.findAndReplace(UnicodeString(TRUE, gPart0, 3), 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString(negNumberStylePattern, negNumberStylePatternLen)); 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org negPattern.findAndReplace(UnicodeString(TRUE, gPart1, 3), UnicodeString(TRUE, gTripleCurrencySign, 3)); 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern->append(gNumberPatternSeparator); 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern->append(negPattern); 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef CURRENCY_PLURAL_INFO_DEBUG 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern->extract(0, pattern->length(), result_1, "UTF-8"); 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org std::cout << "pluralCount: " << pluralCount << "; pattern: " << result_1 << "\n"; 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fPluralCountToCurrencyUnitPattern->put(UnicodeString(pluralCount, -1, US_INV), pattern, status); 3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete keywords; 3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ures_close(currencyRes); 3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ures_close(currRb); 3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo::deleteHash(Hashtable* hTable) 3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( hTable == NULL ) { 3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t pos = -1; 3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UHashElement* element = NULL; 3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while ( (element = hTable->nextElement(pos)) != NULL ) { 3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UHashTok valueTok = element->value; 3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString* value = (UnicodeString*)valueTok.pointer; 3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete value; 3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete hTable; 3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org hTable = NULL; 3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgHashtable* 3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo::initHash(UErrorCode& status) { 3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return NULL; 3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Hashtable* hTable; 3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( (hTable = new Hashtable(TRUE, status)) == NULL ) { 3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_MEMORY_ALLOCATION_ERROR; 3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return NULL; 3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete hTable; 3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return NULL; 3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org hTable->setValueComparator(ValueComparator); 3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return hTable; 3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo::copyHash(const Hashtable* source, 3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Hashtable* target, 3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode& status) { 3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t pos = -1; 3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UHashElement* element = NULL; 3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( source ) { 3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while ( (element = source->nextElement(pos)) != NULL ) { 3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UHashTok keyTok = element->key; 3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString* key = (UnicodeString*)keyTok.pointer; 3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UHashTok valueTok = element->value; 3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString* value = (UnicodeString*)valueTok.pointer; 3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString* copy = new UnicodeString(*value); 3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org target->put(UnicodeString(*key), copy, status); 3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 400