1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 327f654740f2a26ad62a5c155af9199af9e69b889claireho* Copyright (C) 2007-2010, International Business Machines Corporation and * 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* others. All Rights Reserved. * 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef ZSTRFMT_H 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define ZSTRFMT_H 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/unistr.h" 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/calendar.h" 1650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "uhash.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "uvector.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_BEGIN 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Character node used by TextTrieMap 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 24b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustruct CharacterNode { 25b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // No constructor or destructor. 26b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // We malloc and free an uninitalized array of CharacterNode objects 27b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // and clear and delete them ourselves. 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 29b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru void clear(); 30b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru void deleteValues(); 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void addValue(void *value, UErrorCode &status); 33b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru inline UBool hasValues() const; 34b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru inline int32_t countValues() const; 35b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru inline const void *getValue(int32_t index) const; 36b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 37b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru void *fValues; // Union of one single value vs. UVector of values. 38b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar fCharacter; // UTF-16 code unit. 39b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uint16_t fFirstChild; // 0 if no children. 40b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uint16_t fNextSibling; // 0 terminates the list. 41b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UBool fHasValuesVector; 42b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UBool fPadding; 43b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 44b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // No value: fValues == NULL and fHasValuesVector == FALSE 45b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // One value: fValues == value and fHasValuesVector == FALSE 46b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // >=2 values: fValues == UVector of values and fHasValuesVector == TRUE 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 49b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruinline UBool CharacterNode::hasValues() const { 50b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return (UBool)(fValues != NULL); 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 53b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruinline int32_t CharacterNode::countValues() const { 54b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return 55b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fValues == NULL ? 0 : 56b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru !fHasValuesVector ? 1 : 57b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ((const UVector *)fValues)->size(); 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 60b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruinline const void *CharacterNode::getValue(int32_t index) const { 61b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (!fHasValuesVector) { 62b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return fValues; // Assume index == 0. 63b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 64b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return ((const UVector *)fValues)->elementAt(index); 65b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Search result handler callback interface used by TextTrieMap search. 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 71c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruclass TextTrieMapSearchResultHandler : public UMemory { 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UBool handleMatch(int32_t matchLength, 74b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const CharacterNode *node, UErrorCode& status) = 0; 75c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru virtual ~TextTrieMapSearchResultHandler(); //added to avoid warning 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 7850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 7950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* 8050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * ZSFStringPool Pool of (UChar *) strings. Provides for sharing of repeated 8150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * strings within ZoneStringFormats. 8250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 8350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoclass ZSFStringPoolChunk; 8450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoclass ZSFStringPool: public UMemory { 8550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho public: 8650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ZSFStringPool(UErrorCode &status); 8750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ~ZSFStringPool(); 8850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 8950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* Get the pooled string that is equal to the supplied string s. 9050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Copy the string into the pool if it is not already present. 9150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 9250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Life time of the returned string is that of the pool. 9350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 9450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const UChar *get(const UChar *s, UErrorCode &status); 9550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 9650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* Get the pooled string that is equal to the supplied string s. 9750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Copy the string into the pool if it is not already present. 9850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 9950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const UChar *get(const UnicodeString &s, UErrorCode &status); 10050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 10150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* Adopt a string into the pool, without copying it. 10250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Used for strings from resource bundles, which will persist without copying. 10350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 10450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const UChar *adopt(const UChar *s, UErrorCode &status); 10550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 10650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* Freeze the string pool. Discards the hash table that is used 10750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * for looking up a string. All pointers to pooled strings remain valid. 10850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 10950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void freeze(); 11050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 11150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho private: 11250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ZSFStringPoolChunk *fChunks; 11350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UHashtable *fHash; 11450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}; 11550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 11650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * TextTrieMap is a trie implementation for supporting 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * fast prefix match for the string key. 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass TextTrieMap : public UMemory { 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 123c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru TextTrieMap(UBool ignoreCase); 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual ~TextTrieMap(); 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void put(const UnicodeString &key, void *value, ZSFStringPool &sp, UErrorCode &status); 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void search(const UnicodeString &text, int32_t start, 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TextTrieMapSearchResultHandler *handler, UErrorCode& status) const; 12950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t isEmpty() const; 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate: 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool fIgnoreCase; 133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru CharacterNode *fNodes; 134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t fNodesCapacity; 135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t fNodesCount; 136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 13750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UVector *fLazyContents; 13850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool fIsEmpty; 13950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UBool growNodes(); 141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru CharacterNode* addChildNode(CharacterNode *parent, UChar c, UErrorCode &status); 142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru CharacterNode* getChildNode(CharacterNode *parent, UChar c) const; 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 14450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void putImpl(const UnicodeString &key, void *value, UErrorCode &status); 14550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void buildTrie(UErrorCode &status); 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void search(CharacterNode *node, const UnicodeString &text, int32_t start, 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t index, TextTrieMapSearchResultHandler *handler, UErrorCode &status) const; 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Name types, these bit flag are used for zone string lookup 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruenum TimeZoneTranslationType { 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LOCATION = 0x0001, 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GENERIC_LONG = 0x0002, 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GENERIC_SHORT = 0x0004, 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru STANDARD_LONG = 0x0008, 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru STANDARD_SHORT = 0x0010, 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DAYLIGHT_LONG = 0x0020, 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DAYLIGHT_SHORT = 0x0040 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Name type index, these constants are used for index in the zone strings array. 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruenum TimeZoneTranslationTypeIndex { 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ZSIDX_LOCATION = 0, 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ZSIDX_LONG_STANDARD, 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ZSIDX_SHORT_STANDARD, 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ZSIDX_LONG_DAYLIGHT, 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ZSIDX_SHORT_DAYLIGHT, 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ZSIDX_LONG_GENERIC, 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ZSIDX_SHORT_GENERIC, 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ZSIDX_COUNT 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass MessageFormat; 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ZoneStringInfo is a class holding a localized zone string 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * information. 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass ZoneStringInfo : public UMemory { 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual ~ZoneStringInfo(); 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline UnicodeString& getID(UnicodeString &result) const; 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline UnicodeString& getString(UnicodeString &result) const; 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline UBool isStandard(void) const; 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline UBool isDaylight(void) const; 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline UBool isGeneric(void) const; 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate: 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru friend class ZoneStringFormat; 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru friend class ZoneStringSearchResultHandler; 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ZoneStringInfo(const UnicodeString &id, const UnicodeString &str, 19750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho TimeZoneTranslationType type, ZSFStringPool &sp, UErrorCode &status); 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const UChar *fId; 20050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const UChar *fStr; 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZoneTranslationType fType; 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UnicodeString& ZoneStringInfo::getID(UnicodeString &result) const { 20550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return result.setTo(fId, -1); 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UnicodeString& ZoneStringInfo::getString(UnicodeString &result) const { 20950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return result.setTo(fStr, -1); 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UBool ZoneStringInfo::isStandard(void) const { 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (fType == STANDARD_LONG || fType == STANDARD_SHORT); 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UBool ZoneStringInfo::isDaylight(void) const { 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (fType == DAYLIGHT_LONG || fType == DAYLIGHT_SHORT); 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UBool ZoneStringInfo::isGeneric(void) const { 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (fType == LOCATION || fType == GENERIC_LONG || fType == GENERIC_SHORT); 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass SafeZoneStringFormatPtr; 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass ZoneStringFormat : public UMemory { 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ZoneStringFormat(const UnicodeString* const* strings, int32_t rowCount, int32_t columnCount, UErrorCode &status); 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ZoneStringFormat(const Locale& locale, UErrorCode &status); 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual ~ZoneStringFormat(); 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* Gets zone string format from cache if available, create it if not cached. */ 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static SafeZoneStringFormatPtr* getZoneStringFormat(const Locale& locale, UErrorCode &status); 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Create a snapshot of old zone strings array for the given date 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString** createZoneStringsArray(UDate date, int32_t &rowCount, int32_t &colCount, UErrorCode &status) const; 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 24050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* TODO: There is no implementation for this function. Delete declaration? */ 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString** getZoneStrings(int32_t &rowCount, int32_t &columnCount) const; 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& getSpecificLongString(const Calendar &cal, 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result, UErrorCode &status) const; 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& getSpecificShortString(const Calendar &cal, 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool commonlyUsedOnly, UnicodeString &result, UErrorCode &status) const; 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& getGenericLongString(const Calendar &cal, 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result, UErrorCode &status) const; 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& getGenericShortString(const Calendar &cal, 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool commonlyUsedOnly, UnicodeString &result, UErrorCode &status) const; 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& getGenericLocationString(const Calendar &cal, 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result, UErrorCode &status) const; 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const ZoneStringInfo* findSpecificLong(const UnicodeString &text, int32_t start, 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t &matchLength, UErrorCode &status) const; 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const ZoneStringInfo* findSpecificShort(const UnicodeString &text, int32_t start, 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t &matchLength, UErrorCode &status) const; 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const ZoneStringInfo* findGenericLong(const UnicodeString &text, int32_t start, 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t &matchLength, UErrorCode &status) const; 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const ZoneStringInfo* findGenericShort(const UnicodeString &text, int32_t start, 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t &matchLength, UErrorCode &status) const; 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const ZoneStringInfo* findGenericLocation(const UnicodeString &text, int32_t start, 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t &matchLength, UErrorCode &status) const; 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Following APIs are not used by SimpleDateFormat, but public for testing purpose 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline UnicodeString& getLongStandard(const UnicodeString &tzid, UDate date, 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result) const; 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline UnicodeString& getLongDaylight(const UnicodeString &tzid, UDate date, 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result) const; 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline UnicodeString& getLongGenericNonLocation(const UnicodeString &tzid, UDate date, 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result) const; 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline UnicodeString& getLongGenericPartialLocation(const UnicodeString &tzid, UDate date, 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result) const; 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline UnicodeString& getShortStandard(const UnicodeString &tzid, UDate date, UBool commonlyUsedOnly, 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result) const; 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline UnicodeString& getShortDaylight(const UnicodeString &tzid, UDate date, UBool commonlyUsedOnly, 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result) const; 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline UnicodeString& getShortGenericNonLocation(const UnicodeString &tzid, UDate date, UBool commonlyUsedOnly, 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result) const; 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline UnicodeString& getShortGenericPartialLocation(const UnicodeString &tzid, UDate date, UBool commonlyUsedOnly, 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result) const; 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline UnicodeString& getGenericLocation(const UnicodeString &tzid, UnicodeString &result) const; 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate: 28950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Locale fLocale; 29050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UHashtable *fTzidToStrings; 29150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UHashtable *fMzidToStrings; 29250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 29350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho TextTrieMap fZoneStringsTrie; 29450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ZSFStringPool fStringPool; 29550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 29650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UResourceBundle *fZoneStringsArray; 29750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UResourceBundle *fMetazoneItem; 29850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UResourceBundle *fZoneItem; 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 30027f654740f2a26ad62a5c155af9199af9e69b889claireho UBool fIsFullyLoaded; 30127f654740f2a26ad62a5c155af9199af9e69b889claireho 30227f654740f2a26ad62a5c155af9199af9e69b889claireho void loadZone(const UnicodeString &utzid, UErrorCode &status); 30327f654740f2a26ad62a5c155af9199af9e69b889claireho void addSingleZone(UnicodeString &utzid, UErrorCode &status); 30427f654740f2a26ad62a5c155af9199af9e69b889claireho void loadFull(UErrorCode &status); 30527f654740f2a26ad62a5c155af9199af9e69b889claireho 30627f654740f2a26ad62a5c155af9199af9e69b889claireho 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Private method to get a zone string except generic partial location types. 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& getString(const UnicodeString &tzid, TimeZoneTranslationTypeIndex typeIdx, UDate date, 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool commonlyUsedOnly, UnicodeString& result) const; 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Private method to get a generic string, with fallback logic involved, 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * that is, 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1. If a generic non-location string is avaiable for the zone, return it. 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 2. If a generic non-location string is associated with a metazone and 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the zone never use daylight time around the given date, use the standard 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * string (if available). 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Note: In CLDR1.5.1, the same localization is used for generic and standard. 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * In this case, we do not use the standard string and do the rest. 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 3. If a generic non-location string is associated with a metazone and 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the offset at the given time is different from the preferred zone for the 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * current locale, then return the generic partial location string (if avaiable) 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 4. If a generic non-location string is not available, use generic location 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * string. 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& getGenericString(const Calendar &cal, UBool isShort, UBool commonlyUsedOnly, 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result, UErrorCode &status) const; 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Private method to get a generic partial location string 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& getGenericPartialLocationString(const UnicodeString &tzid, UBool isShort, 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate date, UBool commonlyUsedOnly, UnicodeString &result) const; 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Find a prefix matching time zone for the given zone string types. 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param text The text contains a time zone string 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param start The start index within the text 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param types The bit mask representing a set of requested types 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param matchLength Receives the match length 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return If any zone string matched for the requested types, returns a 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ZoneStringInfo for the longest match. If no matches are found for 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the requested types, returns a ZoneStringInfo for the longest match 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for any other types. If nothing matches at all, returns null. 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const ZoneStringInfo* find(const UnicodeString &text, int32_t start, int32_t types, 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t &matchLength, UErrorCode &status) const; 35427f654740f2a26ad62a5c155af9199af9e69b889claireho const ZoneStringInfo* subFind(const UnicodeString &text, int32_t start, int32_t types, 35527f654740f2a26ad62a5c155af9199af9e69b889claireho int32_t &matchLength, UErrorCode &status) const; 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& getRegion(UnicodeString ®ion) const; 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static MessageFormat* getFallbackFormat(const Locale &locale, UErrorCode &status); 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static MessageFormat* getRegionFormat(const Locale &locale, UErrorCode &status); 36150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const UChar* getZoneStringFromBundle(const UResourceBundle *zoneitem, const char *key); 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static UBool isCommonlyUsed(const UResourceBundle *zoneitem); 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static UnicodeString& getLocalizedCountry(const UnicodeString &countryCode, const Locale &locale, 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &displayCountry); 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UnicodeString& 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruZoneStringFormat::getLongStandard(const UnicodeString &tzid, UDate date, 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result) const { 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return getString(tzid, ZSIDX_LONG_STANDARD, date, FALSE /* not used */, result); 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UnicodeString& 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruZoneStringFormat::getLongDaylight(const UnicodeString &tzid, UDate date, 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result) const { 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return getString(tzid, ZSIDX_LONG_DAYLIGHT, date, FALSE /* not used */, result); 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UnicodeString& 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruZoneStringFormat::getLongGenericNonLocation(const UnicodeString &tzid, UDate date, 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result) const { 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return getString(tzid, ZSIDX_LONG_GENERIC, date, FALSE /* not used */, result); 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UnicodeString& 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruZoneStringFormat::getLongGenericPartialLocation(const UnicodeString &tzid, UDate date, 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result) const { 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return getGenericPartialLocationString(tzid, FALSE, date, FALSE /* not used */, result); 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UnicodeString& 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruZoneStringFormat::getShortStandard(const UnicodeString &tzid, UDate date, UBool commonlyUsedOnly, 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result) const { 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return getString(tzid, ZSIDX_SHORT_STANDARD, date, commonlyUsedOnly, result); 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UnicodeString& 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruZoneStringFormat::getShortDaylight(const UnicodeString &tzid, UDate date, UBool commonlyUsedOnly, 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result) const { 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return getString(tzid, ZSIDX_SHORT_DAYLIGHT, date, commonlyUsedOnly, result); 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UnicodeString& 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruZoneStringFormat::getShortGenericNonLocation(const UnicodeString &tzid, UDate date, UBool commonlyUsedOnly, 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result) const { 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return getString(tzid, ZSIDX_SHORT_GENERIC, date, commonlyUsedOnly, result); 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UnicodeString& 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruZoneStringFormat::getShortGenericPartialLocation(const UnicodeString &tzid, UDate date, UBool commonlyUsedOnly, 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString &result) const { 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return getGenericPartialLocationString(tzid, TRUE, date, commonlyUsedOnly, result); 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UnicodeString& 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruZoneStringFormat::getGenericLocation(const UnicodeString &tzid, UnicodeString &result) const { 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return getString(tzid, ZSIDX_LOCATION, 0 /*not used*/, FALSE /*not used*/, result); 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 42250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * ZoneStrings is a container of localized zone strings used by ZoneStringFormat 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass ZoneStrings : public UMemory { 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 42650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ZoneStrings(UnicodeString *strings, 42750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t stringsCount, 42850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool commonlyUsed, 42950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString **genericPartialLocationStrings, 43050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t genericRowCount, 43150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t genericColCount, 43250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ZSFStringPool &sp, 43350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode &status); 43450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho virtual ~ZoneStrings(); 43550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 43650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& getString(int32_t typeIdx, UnicodeString &result) const; 43750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho inline UBool isShortFormatCommonlyUsed(void) const; 43850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString& getGenericPartialLocationString(const UnicodeString &mzid, UBool isShort, 43950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool commonlyUsedOnly, UnicodeString &result) const; 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate: 44250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const UChar **fStrings; 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t fStringsCount; 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool fIsCommonlyUsed; 44550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const UChar * **fGenericPartialLocationStrings; 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t fGenericPartialLocationRowCount; 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t fGenericPartialLocationColCount; 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UBool 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruZoneStrings::isShortFormatCommonlyUsed(void) const { 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fIsCommonlyUsed; 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ZoneStringSearchResultHandler is an implementation of 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * TextTrieMapSearchHandler. This class is used by ZoneStringFormat 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for collecting search results for localized zone strings. 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 460c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruclass ZoneStringSearchResultHandler : public TextTrieMapSearchResultHandler { 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ZoneStringSearchResultHandler(UErrorCode &status); 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual ~ZoneStringSearchResultHandler(); 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru virtual UBool handleMatch(int32_t matchLength, const CharacterNode *node, UErrorCode &status); 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t countMatches(void); 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const ZoneStringInfo* getMatch(int32_t index, int32_t &matchLength); 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void clear(void); 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate: 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UVector fResults; 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t fMatchLen[ZSIDX_COUNT]; 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ZoneStringFormat cache implementation 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass ZSFCacheEntry : public UMemory { 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ~ZSFCacheEntry(); 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void delRef(void); 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const ZoneStringFormat* getZoneStringFormat(void); 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate: 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru friend class ZSFCache; 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ZSFCacheEntry(const Locale &locale, ZoneStringFormat *zsf, ZSFCacheEntry *next); 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale fLocale; 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ZoneStringFormat *fZoneStringFormat; 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ZSFCacheEntry *fNext; 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t fRefCount; 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass SafeZoneStringFormatPtr : public UMemory { 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ~SafeZoneStringFormatPtr(); 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const ZoneStringFormat* get() const; 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate: 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru friend class ZSFCache; 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SafeZoneStringFormatPtr(ZSFCacheEntry *cacheEntry); 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ZSFCacheEntry *fCacheEntry; 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass ZSFCache : public UMemory { 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ZSFCache(int32_t capacity); 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ~ZSFCache(); 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SafeZoneStringFormatPtr* get(const Locale &locale, UErrorCode &status); 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate: 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t fCapacity; 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ZSFCacheEntry *fFirst; 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_END 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif // ZSTRFMT_H 527