| OLD | NEW |
| 1 /* | 1 /* |
| 2 ******************************************************************************* | 2 ******************************************************************************* |
| 3 * Copyright (C) 2011-2014, 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 "unicode/locid.h" | 12 #include "unicode/locid.h" |
| 13 #include "unicode/tznames.h" | 13 #include "unicode/tznames.h" |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 uprv_free(entry); | 74 uprv_free(entry); |
| 75 } | 75 } |
| 76 U_CDECL_END | 76 U_CDECL_END |
| 77 | 77 |
| 78 /** | 78 /** |
| 79 * Function used for removing unreferrenced cache entries exceeding | 79 * Function used for removing unreferrenced cache entries exceeding |
| 80 * the expiration time. This function must be called with in the mutex | 80 * the expiration time. This function must be called with in the mutex |
| 81 * block. | 81 * block. |
| 82 */ | 82 */ |
| 83 static void sweepCache() { | 83 static void sweepCache() { |
| 84 int32_t pos = -1; | 84 int32_t pos = UHASH_FIRST; |
| 85 const UHashElement* elem; | 85 const UHashElement* elem; |
| 86 double now = (double)uprv_getUTCtime(); | 86 double now = (double)uprv_getUTCtime(); |
| 87 | 87 |
| 88 while ((elem = uhash_nextElement(gTimeZoneNamesCache, &pos))) { | 88 while ((elem = uhash_nextElement(gTimeZoneNamesCache, &pos))) { |
| 89 TimeZoneNamesCacheEntry *entry = (TimeZoneNamesCacheEntry *)elem->value.
pointer; | 89 TimeZoneNamesCacheEntry *entry = (TimeZoneNamesCacheEntry *)elem->value.
pointer; |
| 90 if (entry->refCount <= 0 && (now - entry->lastAccess) > CACHE_EXPIRATION
) { | 90 if (entry->refCount <= 0 && (now - entry->lastAccess) > CACHE_EXPIRATION
) { |
| 91 // delete this entry | 91 // delete this entry |
| 92 uhash_removeElement(gTimeZoneNamesCache, elem); | 92 uhash_removeElement(gTimeZoneNamesCache, elem); |
| 93 } | 93 } |
| 94 } | 94 } |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 TimeZoneNames *instance = NULL; | 294 TimeZoneNames *instance = NULL; |
| 295 if (U_SUCCESS(status)) { | 295 if (U_SUCCESS(status)) { |
| 296 instance = new TimeZoneNamesDelegate(locale, status); | 296 instance = new TimeZoneNamesDelegate(locale, status); |
| 297 if (instance == NULL && U_SUCCESS(status)) { | 297 if (instance == NULL && U_SUCCESS(status)) { |
| 298 status = U_MEMORY_ALLOCATION_ERROR; | 298 status = U_MEMORY_ALLOCATION_ERROR; |
| 299 } | 299 } |
| 300 } | 300 } |
| 301 return instance; | 301 return instance; |
| 302 } | 302 } |
| 303 | 303 |
| 304 #ifndef U_HIDE_DRAFT_API | |
| 305 TimeZoneNames* | 304 TimeZoneNames* |
| 306 TimeZoneNames::createTZDBInstance(const Locale& locale, UErrorCode& status) { | 305 TimeZoneNames::createTZDBInstance(const Locale& locale, UErrorCode& status) { |
| 307 TimeZoneNames *instance = NULL; | 306 TimeZoneNames *instance = NULL; |
| 308 if (U_SUCCESS(status)) { | 307 if (U_SUCCESS(status)) { |
| 309 instance = new TZDBTimeZoneNames(locale); | 308 instance = new TZDBTimeZoneNames(locale); |
| 310 if (instance == NULL && U_SUCCESS(status)) { | 309 if (instance == NULL && U_SUCCESS(status)) { |
| 311 status = U_MEMORY_ALLOCATION_ERROR; | 310 status = U_MEMORY_ALLOCATION_ERROR; |
| 312 } | 311 } |
| 313 } | 312 } |
| 314 return instance; | 313 return instance; |
| 315 } | 314 } |
| 316 #endif /* U_HIDE_DRAFT_API */ | |
| 317 | 315 |
| 318 UnicodeString& | 316 UnicodeString& |
| 319 TimeZoneNames::getExemplarLocationName(const UnicodeString& tzID, UnicodeString&
name) const { | 317 TimeZoneNames::getExemplarLocationName(const UnicodeString& tzID, UnicodeString&
name) const { |
| 320 return TimeZoneNamesImpl::getDefaultExemplarLocationName(tzID, name); | 318 return TimeZoneNamesImpl::getDefaultExemplarLocationName(tzID, name); |
| 321 } | 319 } |
| 322 | 320 |
| 323 UnicodeString& | 321 UnicodeString& |
| 324 TimeZoneNames::getDisplayName(const UnicodeString& tzID, UTimeZoneNameType type,
UDate date, UnicodeString& name) const { | 322 TimeZoneNames::getDisplayName(const UnicodeString& tzID, UTimeZoneNameType type,
UDate date, UnicodeString& name) const { |
| 325 getTimeZoneDisplayName(tzID, type, name); | 323 getTimeZoneDisplayName(tzID, type, name); |
| 326 if (name.isEmpty()) { | 324 if (name.isEmpty()) { |
| 327 UnicodeString mzID; | 325 UChar mzIDBuf[32]; |
| 326 UnicodeString mzID(mzIDBuf, 0, UPRV_LENGTHOF(mzIDBuf)); |
| 328 getMetaZoneID(tzID, date, mzID); | 327 getMetaZoneID(tzID, date, mzID); |
| 329 getMetaZoneDisplayName(mzID, type, name); | 328 getMetaZoneDisplayName(mzID, type, name); |
| 330 } | 329 } |
| 331 return name; | 330 return name; |
| 332 } | 331 } |
| 333 | 332 |
| 334 | 333 |
| 335 struct MatchInfo : UMemory { | 334 struct MatchInfo : UMemory { |
| 336 UTimeZoneNameType nameType; | 335 UTimeZoneNameType nameType; |
| 337 UnicodeString id; | 336 UnicodeString id; |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 467 } else if (U_FAILURE(status)) { | 466 } else if (U_FAILURE(status)) { |
| 468 delete fMatches; | 467 delete fMatches; |
| 469 fMatches = NULL; | 468 fMatches = NULL; |
| 470 } | 469 } |
| 471 return fMatches; | 470 return fMatches; |
| 472 } | 471 } |
| 473 | 472 |
| 474 | 473 |
| 475 U_NAMESPACE_END | 474 U_NAMESPACE_END |
| 476 #endif | 475 #endif |
| OLD | NEW |