Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Side by Side Diff: source/i18n/tzgnames.cpp

Issue 1621843002: ICU 56 update step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@561
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « source/i18n/tzfmt.cpp ('k') | source/i18n/tznames.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 ******************************************************************************* 2 *******************************************************************************
3 * Copyright (C) 2011-2013, International Business Machines Corporation and 3 * Copyright (C) 2011-2015, International Business Machines Corporation and
4 * others. All Rights Reserved. 4 * others. All Rights Reserved.
5 ******************************************************************************* 5 *******************************************************************************
6 */ 6 */
7 7
8 #include "unicode/utypes.h" 8 #include "unicode/utypes.h"
9 9
10 #if !UCONFIG_NO_FORMATTING 10 #if !UCONFIG_NO_FORMATTING
11 11
12 #include "tzgnames.h" 12 #include "tzgnames.h"
13 13
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 } else if (regionLen < (int32_t)sizeof(fTargetRegion)) { 427 } else if (regionLen < (int32_t)sizeof(fTargetRegion)) {
428 uprv_strcpy(fTargetRegion, region); 428 uprv_strcpy(fTargetRegion, region);
429 } else { 429 } else {
430 fTargetRegion[0] = 0; 430 fTargetRegion[0] = 0;
431 } 431 }
432 432
433 // preload generic names for the default zone 433 // preload generic names for the default zone
434 TimeZone *tz = TimeZone::createDefault(); 434 TimeZone *tz = TimeZone::createDefault();
435 const UChar *tzID = ZoneMeta::getCanonicalCLDRID(*tz); 435 const UChar *tzID = ZoneMeta::getCanonicalCLDRID(*tz);
436 if (tzID != NULL) { 436 if (tzID != NULL) {
437 loadStrings(UnicodeString(tzID)); 437 loadStrings(UnicodeString(TRUE, tzID, -1));
438 } 438 }
439 delete tz; 439 delete tz;
440 } 440 }
441 441
442 void 442 void
443 TZGNCore::cleanup() { 443 TZGNCore::cleanup() {
444 if (fRegionFormat != NULL) { 444 if (fRegionFormat != NULL) {
445 delete fRegionFormat; 445 delete fRegionFormat;
446 } 446 }
447 if (fFallbackFormat != NULL) { 447 if (fFallbackFormat != NULL) {
(...skipping 12 matching lines...) Expand all
460 460
461 461
462 UnicodeString& 462 UnicodeString&
463 TZGNCore::getDisplayName(const TimeZone& tz, UTimeZoneGenericNameType type, UDat e date, UnicodeString& name) const { 463 TZGNCore::getDisplayName(const TimeZone& tz, UTimeZoneGenericNameType type, UDat e date, UnicodeString& name) const {
464 name.setToBogus(); 464 name.setToBogus();
465 switch (type) { 465 switch (type) {
466 case UTZGNM_LOCATION: 466 case UTZGNM_LOCATION:
467 { 467 {
468 const UChar* tzCanonicalID = ZoneMeta::getCanonicalCLDRID(tz); 468 const UChar* tzCanonicalID = ZoneMeta::getCanonicalCLDRID(tz);
469 if (tzCanonicalID != NULL) { 469 if (tzCanonicalID != NULL) {
470 getGenericLocationName(UnicodeString(tzCanonicalID), name); 470 getGenericLocationName(UnicodeString(TRUE, tzCanonicalID, -1), n ame);
471 } 471 }
472 } 472 }
473 break; 473 break;
474 case UTZGNM_LONG: 474 case UTZGNM_LONG:
475 case UTZGNM_SHORT: 475 case UTZGNM_SHORT:
476 formatGenericNonLocationName(tz, type, date, name); 476 formatGenericNonLocationName(tz, type, date, name);
477 if (name.isEmpty()) { 477 if (name.isEmpty()) {
478 const UChar* tzCanonicalID = ZoneMeta::getCanonicalCLDRID(tz); 478 const UChar* tzCanonicalID = ZoneMeta::getCanonicalCLDRID(tz);
479 if (tzCanonicalID != NULL) { 479 if (tzCanonicalID != NULL) {
480 getGenericLocationName(UnicodeString(tzCanonicalID), name); 480 getGenericLocationName(UnicodeString(TRUE, tzCanonicalID, -1), n ame);
481 } 481 }
482 } 482 }
483 break; 483 break;
484 default: 484 default:
485 break; 485 break;
486 } 486 }
487 return name; 487 return name;
488 } 488 }
489 489
490 UnicodeString& 490 UnicodeString&
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 UnicodeString& 613 UnicodeString&
614 TZGNCore::formatGenericNonLocationName(const TimeZone& tz, UTimeZoneGenericNameT ype type, UDate date, UnicodeString& name) const { 614 TZGNCore::formatGenericNonLocationName(const TimeZone& tz, UTimeZoneGenericNameT ype type, UDate date, UnicodeString& name) const {
615 U_ASSERT(type == UTZGNM_LONG || type == UTZGNM_SHORT); 615 U_ASSERT(type == UTZGNM_LONG || type == UTZGNM_SHORT);
616 name.setToBogus(); 616 name.setToBogus();
617 617
618 const UChar* uID = ZoneMeta::getCanonicalCLDRID(tz); 618 const UChar* uID = ZoneMeta::getCanonicalCLDRID(tz);
619 if (uID == NULL) { 619 if (uID == NULL) {
620 return name; 620 return name;
621 } 621 }
622 622
623 UnicodeString tzID(uID); 623 UnicodeString tzID(TRUE, uID, -1);
624 624
625 // Try to get a name from time zone first 625 // Try to get a name from time zone first
626 UTimeZoneNameType nameType = (type == UTZGNM_LONG) ? UTZNM_LONG_GENERIC : UT ZNM_SHORT_GENERIC; 626 UTimeZoneNameType nameType = (type == UTZGNM_LONG) ? UTZNM_LONG_GENERIC : UT ZNM_SHORT_GENERIC;
627 fTimeZoneNames->getTimeZoneDisplayName(tzID, nameType, name); 627 fTimeZoneNames->getTimeZoneDisplayName(tzID, nameType, name);
628 628
629 if (!name.isEmpty()) { 629 if (!name.isEmpty()) {
630 return name; 630 return name;
631 } 631 }
632 632
633 // Try meta zone 633 // Try meta zone
634 UnicodeString mzID; 634 UChar mzIDBuf[32];
635 UnicodeString mzID(mzIDBuf, 0, UPRV_LENGTHOF(mzIDBuf));
635 fTimeZoneNames->getMetaZoneID(tzID, date, mzID); 636 fTimeZoneNames->getMetaZoneID(tzID, date, mzID);
636 if (!mzID.isEmpty()) { 637 if (!mzID.isEmpty()) {
637 UErrorCode status = U_ZERO_ERROR; 638 UErrorCode status = U_ZERO_ERROR;
638 UBool useStandard = FALSE; 639 UBool useStandard = FALSE;
639 int32_t raw, sav; 640 int32_t raw, sav;
641 UChar tmpNameBuf[64];
640 642
641 tz.getOffset(date, FALSE, raw, sav, status); 643 tz.getOffset(date, FALSE, raw, sav, status);
642 if (U_FAILURE(status)) { 644 if (U_FAILURE(status)) {
643 return name; 645 return name;
644 } 646 }
645 647
646 if (sav == 0) { 648 if (sav == 0) {
647 useStandard = TRUE; 649 useStandard = TRUE;
648 650
649 TimeZone *tmptz = tz.clone(); 651 TimeZone *tmptz = tz.clone();
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
687 if (U_FAILURE(status)) { 689 if (U_FAILURE(status)) {
688 delete tmptz; 690 delete tmptz;
689 return name; 691 return name;
690 } 692 }
691 } 693 }
692 delete tmptz; 694 delete tmptz;
693 } 695 }
694 if (useStandard) { 696 if (useStandard) {
695 UTimeZoneNameType stdNameType = (nameType == UTZNM_LONG_GENERIC) 697 UTimeZoneNameType stdNameType = (nameType == UTZNM_LONG_GENERIC)
696 ? UTZNM_LONG_STANDARD : UTZNM_SHORT_STANDARD; 698 ? UTZNM_LONG_STANDARD : UTZNM_SHORT_STANDARD;
697 UnicodeString stdName; 699 UnicodeString stdName(tmpNameBuf, 0, UPRV_LENGTHOF(tmpNameBuf));
698 fTimeZoneNames->getDisplayName(tzID, stdNameType, date, stdName); 700 fTimeZoneNames->getDisplayName(tzID, stdNameType, date, stdName);
699 if (!stdName.isEmpty()) { 701 if (!stdName.isEmpty()) {
700 name.setTo(stdName); 702 name.setTo(stdName);
701 703
702 // TODO: revisit this issue later 704 // TODO: revisit this issue later
703 // In CLDR, a same display name is used for both generic and sta ndard 705 // In CLDR, a same display name is used for both generic and sta ndard
704 // for some meta zones in some locales. This looks like a data bugs. 706 // for some meta zones in some locales. This looks like a data bugs.
705 // For now, we check if the standard name is different from its generic 707 // For now, we check if the standard name is different from its generic
706 // name below. 708 // name below.
707 UnicodeString mzGenericName; 709 UChar genNameBuf[64];
710 UnicodeString mzGenericName(genNameBuf, 0, UPRV_LENGTHOF(genName Buf));
708 fTimeZoneNames->getMetaZoneDisplayName(mzID, nameType, mzGeneric Name); 711 fTimeZoneNames->getMetaZoneDisplayName(mzID, nameType, mzGeneric Name);
709 if (stdName.caseCompare(mzGenericName, 0) == 0) { 712 if (stdName.caseCompare(mzGenericName, 0) == 0) {
710 name.setToBogus(); 713 name.setToBogus();
711 } 714 }
712 } 715 }
713 } 716 }
714 if (name.isEmpty()) { 717 if (name.isEmpty()) {
715 // Get a name from meta zone 718 // Get a name from meta zone
716 UnicodeString mzName; 719 UnicodeString mzName(tmpNameBuf, 0, UPRV_LENGTHOF(tmpNameBuf));
717 fTimeZoneNames->getMetaZoneDisplayName(mzID, nameType, mzName); 720 fTimeZoneNames->getMetaZoneDisplayName(mzID, nameType, mzName);
718 if (!mzName.isEmpty()) { 721 if (!mzName.isEmpty()) {
719 // Check if we need to use a partial location format. 722 // Check if we need to use a partial location format.
720 // This check is done by comparing offset with the meta zone's 723 // This check is done by comparing offset with the meta zone's
721 // golden zone at the given date. 724 // golden zone at the given date.
722 UnicodeString goldenID; 725 UChar idBuf[32];
726 UnicodeString goldenID(idBuf, 0, UPRV_LENGTHOF(idBuf));
723 fTimeZoneNames->getReferenceZoneID(mzID, fTargetRegion, goldenID ); 727 fTimeZoneNames->getReferenceZoneID(mzID, fTargetRegion, goldenID );
724 if (!goldenID.isEmpty() && goldenID != tzID) { 728 if (!goldenID.isEmpty() && goldenID != tzID) {
725 TimeZone *goldenZone = TimeZone::createTimeZone(goldenID); 729 TimeZone *goldenZone = TimeZone::createTimeZone(goldenID);
726 int32_t raw1, sav1; 730 int32_t raw1, sav1;
727 731
728 // Check offset in the golden zone with wall time. 732 // Check offset in the golden zone with wall time.
729 // With getOffset(date, false, offsets1), 733 // With getOffset(date, false, offsets1),
730 // you may get incorrect results because of time overlap at DST->STD 734 // you may get incorrect results because of time overlap at DST->STD
731 // transition. 735 // transition.
732 goldenZone->getOffset(date + raw + sav, TRUE, raw1, sav1, st atus); 736 goldenZone->getOffset(date + raw + sav, TRUE, raw1, sav1, st atus);
(...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after
1178 uprv_free(entry); 1182 uprv_free(entry);
1179 } 1183 }
1180 U_CDECL_END 1184 U_CDECL_END
1181 1185
1182 /** 1186 /**
1183 * Function used for removing unreferrenced cache entries exceeding 1187 * Function used for removing unreferrenced cache entries exceeding
1184 * the expiration time. This function must be called with in the mutex 1188 * the expiration time. This function must be called with in the mutex
1185 * block. 1189 * block.
1186 */ 1190 */
1187 static void sweepCache() { 1191 static void sweepCache() {
1188 int32_t pos = -1; 1192 int32_t pos = UHASH_FIRST;
1189 const UHashElement* elem; 1193 const UHashElement* elem;
1190 double now = (double)uprv_getUTCtime(); 1194 double now = (double)uprv_getUTCtime();
1191 1195
1192 while ((elem = uhash_nextElement(gTZGNCoreCache, &pos))) { 1196 while ((elem = uhash_nextElement(gTZGNCoreCache, &pos))) {
1193 TZGNCoreRef *entry = (TZGNCoreRef *)elem->value.pointer; 1197 TZGNCoreRef *entry = (TZGNCoreRef *)elem->value.pointer;
1194 if (entry->refCount <= 0 && (now - entry->lastAccess) > CACHE_EXPIRATION ) { 1198 if (entry->refCount <= 0 && (now - entry->lastAccess) > CACHE_EXPIRATION ) {
1195 // delete this entry 1199 // delete this entry
1196 uhash_removeElement(gTZGNCoreCache, elem); 1200 uhash_removeElement(gTZGNCoreCache, elem);
1197 } 1201 }
1198 } 1202 }
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
1340 } 1344 }
1341 1345
1342 int32_t 1346 int32_t
1343 TimeZoneGenericNames::findBestMatch(const UnicodeString& text, int32_t start, ui nt32_t types, 1347 TimeZoneGenericNames::findBestMatch(const UnicodeString& text, int32_t start, ui nt32_t types,
1344 UnicodeString& tzID, UTimeZoneFormatTimeType& timeType, UErrorCode& stat us) const { 1348 UnicodeString& tzID, UTimeZoneFormatTimeType& timeType, UErrorCode& stat us) const {
1345 return fRef->obj->findBestMatch(text, start, types, tzID, timeType, status); 1349 return fRef->obj->findBestMatch(text, start, types, tzID, timeType, status);
1346 } 1350 }
1347 1351
1348 U_NAMESPACE_END 1352 U_NAMESPACE_END
1349 #endif 1353 #endif
OLDNEW
« no previous file with comments | « source/i18n/tzfmt.cpp ('k') | source/i18n/tznames.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698