1 /* 2 ******************************************************************************* 3 * Copyright (C) 2011, International Business Machines Corporation and * 4 * others. All Rights Reserved. * 5 ******************************************************************************* 6 */ 7 #ifndef __TZGNAMES_H 8 #define __TZGNAMES_H 9 10 /** 11 * \file 12 * \brief C API: Time zone generic names classe 13 */ 14 15 #include "unicode/utypes.h" 16 17 #if !UCONFIG_NO_FORMATTING 18 19 #include "unicode/locid.h" 20 #include "unicode/timezone.h" 21 #include "unicode/unistr.h" 22 #include "tznames.h" 23 #include "tznames_impl.h" 24 #include "tzfmt.h" 25 #include "uhash.h" 26 #include "umutex.h" 27 28 U_CDECL_BEGIN 29 30 typedef enum UTimeZoneGenericNameType { 31 UTZGNM_UNKNOWN = 0x00, 32 UTZGNM_LOCATION = 0x01, 33 UTZGNM_LONG = 0x02, 34 UTZGNM_SHORT = 0x04 35 } UTimeZoneGenericNameType; 36 37 U_CDECL_END 38 39 U_NAMESPACE_BEGIN 40 41 class LocaleDisplayNames; 42 class MessageFormat; 43 class TimeZone; 44 45 class TimeZoneGenericNameMatchInfo : public UMemory { 46 public: 47 TimeZoneGenericNameMatchInfo(UVector* matches); 48 ~TimeZoneGenericNameMatchInfo(); 49 50 int32_t size() const; 51 UTimeZoneGenericNameType getGenericNameType(int32_t index) const; 52 int32_t getMatchLength(int32_t index) const; 53 UnicodeString& getTimeZoneID(int32_t index, UnicodeString& tzID) const; 54 55 private: 56 UVector* fMatches; // vector of MatchEntry 57 }; 58 59 class U_I18N_API TimeZoneGenericNames : public UMemory { 60 public: 61 TimeZoneGenericNames(const Locale& locale, UErrorCode& status); 62 virtual ~TimeZoneGenericNames(); 63 64 UnicodeString& getDisplayName(const TimeZone& tz, UTimeZoneGenericNameType type, 65 UDate date, UnicodeString& name) const; 66 67 UnicodeString& getGenericLocationName(const UnicodeString& tzCanonicalID, UnicodeString& name) const; 68 69 int32_t findBestMatch(const UnicodeString& text, int32_t start, uint32_t types, 70 UnicodeString& tzID, UTimeZoneTimeType& timeType, UErrorCode& status) const; 71 72 private: 73 Locale fLocale; 74 UMTX fLock; 75 const TimeZoneNames* fTimeZoneNames; 76 UHashtable* fLocationNamesMap; 77 UHashtable* fPartialLocationNamesMap; 78 79 MessageFormat* fRegionFormat; 80 MessageFormat* fFallbackRegionFormat; 81 MessageFormat* fFallbackFormat; 82 83 LocaleDisplayNames* fLocaleDisplayNames; 84 ZNStringPool fStringPool; 85 86 TextTrieMap fGNamesTrie; 87 UBool fGNamesTrieFullyLoaded; 88 89 char fTargetRegion[ULOC_COUNTRY_CAPACITY]; 90 91 void initialize(const Locale& locale, UErrorCode& status); 92 void cleanup(); 93 94 void loadStrings(const UnicodeString& tzCanonicalID); 95 96 const UChar* getGenericLocationName(const UnicodeString& tzCanonicalID); 97 98 UnicodeString& formatGenericNonLocationName(const TimeZone& tz, UTimeZoneGenericNameType type, 99 UDate date, UnicodeString& name) const; 100 101 UnicodeString& getPartialLocationName(const UnicodeString& tzCanonicalID, 102 const UnicodeString& mzID, UBool isLong, const UnicodeString& mzDisplayName, 103 UnicodeString& name) const; 104 105 const UChar* getPartialLocationName(const UnicodeString& tzCanonicalID, 106 const UnicodeString& mzID, UBool isLong, const UnicodeString& mzDisplayName); 107 108 TimeZoneGenericNameMatchInfo* findLocal(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const; 109 110 TimeZoneNameMatchInfo* findTimeZoneNames(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const; 111 }; 112 113 U_NAMESPACE_END 114 #endif 115 #endif 116