]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/i18n/tznames_impl.h
ICU-64260.0.1.tar.gz
[apple/icu.git] / icuSources / i18n / tznames_impl.h
index c677a8b9537a536560818745a70179f4a69584d8..4db036e7475e3568d670d1b9554979f4848d7b5c 100644 (file)
@@ -1,7 +1,9 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
 /*
  *******************************************************************************
 /*
  *******************************************************************************
- * Copyright (C) 2011-2013, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
+ * Copyright (C) 2011-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
  *******************************************************************************
  */
 
  *******************************************************************************
  */
 
@@ -25,6 +27,9 @@
 #include "uvector.h"
 #include "umutex.h"
 
 #include "uvector.h"
 #include "umutex.h"
 
+// Some zone display names involving supplementary characters can be over 50 chars, 100 UTF-16 code units, 200 UTF-8 bytes
+#define ZONE_NAME_U16_MAX 128
+
 U_NAMESPACE_BEGIN
 
 /*
 U_NAMESPACE_BEGIN
 
 /*
@@ -159,8 +164,8 @@ private:
 
 
 class ZNames;
 
 
 class ZNames;
-class TZNames;
 class TextTrieMap;
 class TextTrieMap;
+class ZNameSearchHandler;
 
 class TimeZoneNamesImpl : public TimeZoneNames {
 public:
 
 class TimeZoneNamesImpl : public TimeZoneNames {
 public:
@@ -184,8 +189,16 @@ public:
 
     TimeZoneNames::MatchInfoCollection* find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const;
 
 
     TimeZoneNames::MatchInfoCollection* find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const;
 
+    void loadAllDisplayNames(UErrorCode& status);
+    void getDisplayNames(const UnicodeString& tzID, const UTimeZoneNameType types[], int32_t numTypes, UDate date, UnicodeString dest[], UErrorCode& status) const;
+
     static UnicodeString& getDefaultExemplarLocationName(const UnicodeString& tzID, UnicodeString& name);
 
     static UnicodeString& getDefaultExemplarLocationName(const UnicodeString& tzID, UnicodeString& name);
 
+    static StringEnumeration* _getAvailableMetaZoneIDs(UErrorCode& status);
+    static StringEnumeration* _getAvailableMetaZoneIDs(const UnicodeString& tzID, UErrorCode& status);
+    static UnicodeString& _getMetaZoneID(const UnicodeString& tzID, UDate date, UnicodeString& mzID);
+    static UnicodeString& _getReferenceZoneID(const UnicodeString& mzID, const char* region, UnicodeString& tzID);
+
 private:
 
     Locale fLocale;
 private:
 
     Locale fLocale;
@@ -196,15 +209,53 @@ private:
     UHashtable* fMZNamesMap;
 
     UBool fNamesTrieFullyLoaded;
     UHashtable* fMZNamesMap;
 
     UBool fNamesTrieFullyLoaded;
+    UBool fNamesFullyLoaded;
     TextTrieMap fNamesTrie;
 
     void initialize(const Locale& locale, UErrorCode& status);
     void cleanup();
 
     TextTrieMap fNamesTrie;
 
     void initialize(const Locale& locale, UErrorCode& status);
     void cleanup();
 
-    void loadStrings(const UnicodeString& tzCanonicalID);
+    void loadStrings(const UnicodeString& tzCanonicalID, UErrorCode& status);
+
+    ZNames* loadMetaZoneNames(const UnicodeString& mzId, UErrorCode& status);
+    ZNames* loadTimeZoneNames(const UnicodeString& mzId, UErrorCode& status);
+    TimeZoneNames::MatchInfoCollection* doFind(ZNameSearchHandler& handler,
+        const UnicodeString& text, int32_t start, UErrorCode& status) const;
+    void addAllNamesIntoTrie(UErrorCode& errorCode);
+
+    void internalLoadAllDisplayNames(UErrorCode& status);
+
+    struct ZoneStringsLoader;
+};
+
+class TZDBNames;
+
+class TZDBTimeZoneNames : public TimeZoneNames {
+public:
+    TZDBTimeZoneNames(const Locale& locale);
+    virtual ~TZDBTimeZoneNames();
 
 
-    ZNames* loadMetaZoneNames(const UnicodeString& mzId);
-    TZNames* loadTimeZoneNames(const UnicodeString& mzId);
+    virtual UBool operator==(const TimeZoneNames& other) const;
+    virtual TimeZoneNames* clone() const;
+
+    StringEnumeration* getAvailableMetaZoneIDs(UErrorCode& status) const;
+    StringEnumeration* getAvailableMetaZoneIDs(const UnicodeString& tzID, UErrorCode& status) const;
+
+    UnicodeString& getMetaZoneID(const UnicodeString& tzID, UDate date, UnicodeString& mzID) const;
+    UnicodeString& getReferenceZoneID(const UnicodeString& mzID, const char* region, UnicodeString& tzID) const;
+
+    UnicodeString& getMetaZoneDisplayName(const UnicodeString& mzID, UTimeZoneNameType type, UnicodeString& name) const;
+    UnicodeString& getTimeZoneDisplayName(const UnicodeString& tzID, UTimeZoneNameType type, UnicodeString& name) const;
+
+    TimeZoneNames::MatchInfoCollection* find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const;
+
+    // When TZDBNames for the metazone is not available, this method returns NULL,
+    // but does NOT set U_MISSING_RESOURCE_ERROR to status.
+    static const TZDBNames* getMetaZoneNames(const UnicodeString& mzId, UErrorCode& status);
+
+private:
+    Locale fLocale;
+    char fRegion[ULOC_COUNTRY_CAPACITY];
 };
 
 U_NAMESPACE_END
 };
 
 U_NAMESPACE_END