ICU-11912 TimeZoneNames data sink implementation in C++.
X-SVN-Rev: 38960
This commit is contained in:
parent
28ed27b463
commit
ad409a250e
@ -1273,6 +1273,12 @@ DateFormatSymbols::initZoneStringsArray(void) {
|
|||||||
TimeZoneNames *tzNames = NULL;
|
TimeZoneNames *tzNames = NULL;
|
||||||
int32_t rows = 0;
|
int32_t rows = 0;
|
||||||
|
|
||||||
|
static const UTimeZoneNameType TYPES[] = {
|
||||||
|
UTZNM_LONG_STANDARD, UTZNM_SHORT_STANDARD,
|
||||||
|
UTZNM_LONG_DAYLIGHT, UTZNM_SHORT_DAYLIGHT
|
||||||
|
};
|
||||||
|
static const int32_t NUM_TYPES = 4;
|
||||||
|
|
||||||
do { // dummy do-while
|
do { // dummy do-while
|
||||||
|
|
||||||
tzids = TimeZone::createTimeZoneIDEnumeration(ZONE_SET, NULL, NULL, status);
|
tzids = TimeZone::createTimeZoneIDEnumeration(ZONE_SET, NULL, NULL, status);
|
||||||
@ -1291,6 +1297,8 @@ DateFormatSymbols::initZoneStringsArray(void) {
|
|||||||
uprv_memset(zarray, 0, size);
|
uprv_memset(zarray, 0, size);
|
||||||
|
|
||||||
tzNames = TimeZoneNames::createInstance(fZSFLocale, status);
|
tzNames = TimeZoneNames::createInstance(fZSFLocale, status);
|
||||||
|
tzNames->loadAllDisplayNames(status);
|
||||||
|
if (U_FAILURE(status)) { break; }
|
||||||
|
|
||||||
const UnicodeString *tzid;
|
const UnicodeString *tzid;
|
||||||
int32_t i = 0;
|
int32_t i = 0;
|
||||||
@ -1309,10 +1317,7 @@ DateFormatSymbols::initZoneStringsArray(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
zarray[i][0].setTo(*tzid);
|
zarray[i][0].setTo(*tzid);
|
||||||
zarray[i][1].setTo(tzNames->getDisplayName(*tzid, UTZNM_LONG_STANDARD, now, tzDispName));
|
tzNames->getDisplayNames(*tzid, TYPES, NUM_TYPES, now, zarray[i]+1);
|
||||||
zarray[i][2].setTo(tzNames->getDisplayName(*tzid, UTZNM_SHORT_STANDARD, now, tzDispName));
|
|
||||||
zarray[i][3].setTo(tzNames->getDisplayName(*tzid, UTZNM_LONG_DAYLIGHT, now, tzDispName));
|
|
||||||
zarray[i][4].setTo(tzNames->getDisplayName(*tzid, UTZNM_SHORT_DAYLIGHT, now, tzDispName));
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1338,7 +1343,7 @@ DateFormatSymbols::initZoneStringsArray(void) {
|
|||||||
|
|
||||||
fLocaleZoneStrings = zarray;
|
fLocaleZoneStrings = zarray;
|
||||||
fZoneStringsRowCount = rows;
|
fZoneStringsRowCount = rows;
|
||||||
fZoneStringsColCount = 5;
|
fZoneStringsColCount = 1 + NUM_TYPES;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -118,6 +118,8 @@ public:
|
|||||||
|
|
||||||
UnicodeString& getExemplarLocationName(const UnicodeString& tzID, UnicodeString& name) const;
|
UnicodeString& getExemplarLocationName(const UnicodeString& tzID, UnicodeString& name) const;
|
||||||
|
|
||||||
|
void loadAllDisplayNames(UErrorCode& status);
|
||||||
|
|
||||||
MatchInfoCollection* find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const;
|
MatchInfoCollection* find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const;
|
||||||
private:
|
private:
|
||||||
TimeZoneNamesDelegate();
|
TimeZoneNamesDelegate();
|
||||||
@ -280,6 +282,11 @@ TimeZoneNamesDelegate::getExemplarLocationName(const UnicodeString& tzID, Unicod
|
|||||||
return fTZnamesCacheEntry->names->getExemplarLocationName(tzID, name);
|
return fTZnamesCacheEntry->names->getExemplarLocationName(tzID, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TimeZoneNamesDelegate::loadAllDisplayNames(UErrorCode& status) {
|
||||||
|
fTZnamesCacheEntry->names->loadAllDisplayNames(status);
|
||||||
|
}
|
||||||
|
|
||||||
TimeZoneNames::MatchInfoCollection*
|
TimeZoneNames::MatchInfoCollection*
|
||||||
TimeZoneNamesDelegate::find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const {
|
TimeZoneNamesDelegate::find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const {
|
||||||
return fTZnamesCacheEntry->names->find(text, start, types, status);
|
return fTZnamesCacheEntry->names->find(text, start, types, status);
|
||||||
@ -332,6 +339,29 @@ TimeZoneNames::getDisplayName(const UnicodeString& tzID, UTimeZoneNameType type,
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TimeZoneNames::loadAllDisplayNames(UErrorCode& status) {
|
||||||
|
return loadAllDisplayNames(status);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TimeZoneNames::getDisplayNames(const UnicodeString& tzID, const UTimeZoneNameType types[], int32_t numTypes, UDate date, UnicodeString dest[]) const {
|
||||||
|
if (tzID.isEmpty()) { return; }
|
||||||
|
UnicodeString mzID;
|
||||||
|
for (int i = 0; i < numTypes; i++) {
|
||||||
|
UnicodeString name;
|
||||||
|
UTimeZoneNameType type = types[i];
|
||||||
|
getTimeZoneDisplayName(tzID, type, name);
|
||||||
|
if (name.isEmpty()) {
|
||||||
|
if (mzID.isEmpty()) {
|
||||||
|
getMetaZoneID(tzID, date, mzID);
|
||||||
|
}
|
||||||
|
getMetaZoneDisplayName(mzID, type, name);
|
||||||
|
}
|
||||||
|
dest[i].setTo(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
struct MatchInfo : UMemory {
|
struct MatchInfo : UMemory {
|
||||||
UTimeZoneNameType nameType;
|
UTimeZoneNameType nameType;
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -2,8 +2,8 @@
|
|||||||
// License & terms of use: http://www.unicode.org/copyright.html
|
// License & terms of use: http://www.unicode.org/copyright.html
|
||||||
/*
|
/*
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (C) 2011-2014, International Business Machines Corporation and *
|
* Copyright (C) 2011-2016, International Business Machines Corporation and
|
||||||
* others. All Rights Reserved. *
|
* others. All Rights Reserved.
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -161,8 +161,8 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
class ZNames;
|
class ZNames;
|
||||||
class TZNames;
|
|
||||||
class TextTrieMap;
|
class TextTrieMap;
|
||||||
|
class ZNameSearchHandler;
|
||||||
|
|
||||||
class TimeZoneNamesImpl : public TimeZoneNames {
|
class TimeZoneNamesImpl : public TimeZoneNames {
|
||||||
public:
|
public:
|
||||||
@ -186,6 +186,9 @@ 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& errorCode);
|
||||||
|
void internalLoadAllDisplayNames(UErrorCode& errorCode);
|
||||||
|
|
||||||
static UnicodeString& getDefaultExemplarLocationName(const UnicodeString& tzID, UnicodeString& name);
|
static UnicodeString& getDefaultExemplarLocationName(const UnicodeString& tzID, UnicodeString& name);
|
||||||
|
|
||||||
static StringEnumeration* _getAvailableMetaZoneIDs(UErrorCode& status);
|
static StringEnumeration* _getAvailableMetaZoneIDs(UErrorCode& status);
|
||||||
@ -203,6 +206,7 @@ private:
|
|||||||
UHashtable* fMZNamesMap;
|
UHashtable* fMZNamesMap;
|
||||||
|
|
||||||
UBool fNamesTrieFullyLoaded;
|
UBool fNamesTrieFullyLoaded;
|
||||||
|
UBool fNamesFullyLoaded;
|
||||||
TextTrieMap fNamesTrie;
|
TextTrieMap fNamesTrie;
|
||||||
|
|
||||||
void initialize(const Locale& locale, UErrorCode& status);
|
void initialize(const Locale& locale, UErrorCode& status);
|
||||||
@ -211,7 +215,12 @@ private:
|
|||||||
void loadStrings(const UnicodeString& tzCanonicalID);
|
void loadStrings(const UnicodeString& tzCanonicalID);
|
||||||
|
|
||||||
ZNames* loadMetaZoneNames(const UnicodeString& mzId);
|
ZNames* loadMetaZoneNames(const UnicodeString& mzId);
|
||||||
TZNames* loadTimeZoneNames(const UnicodeString& mzId);
|
ZNames* loadTimeZoneNames(const UnicodeString& mzId);
|
||||||
|
TimeZoneNames::MatchInfoCollection* doFind(ZNameSearchHandler& handler,
|
||||||
|
const UnicodeString& text, int32_t start, UErrorCode& status) const;
|
||||||
|
void addAllNamesIntoTrie(UErrorCode& errorCode);
|
||||||
|
|
||||||
|
struct ZoneStringsLoader;
|
||||||
};
|
};
|
||||||
|
|
||||||
class TZDBNames;
|
class TZDBNames;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
// License & terms of use: http://www.unicode.org/copyright.html
|
// License & terms of use: http://www.unicode.org/copyright.html
|
||||||
/*
|
/*
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (C) 2011-2015, International Business Machines Corporation and
|
* Copyright (C) 2011-2016, International Business Machines Corporation and
|
||||||
* others. All Rights Reserved.
|
* others. All Rights Reserved.
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
*/
|
*/
|
||||||
@ -135,7 +135,7 @@ public:
|
|||||||
virtual ~TimeZoneNames();
|
virtual ~TimeZoneNames();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return true if the given TimeZoneNames objects are emantically equal.
|
* Return true if the given TimeZoneNames objects are semantically equal.
|
||||||
* @param other the object to be compared with.
|
* @param other the object to be compared with.
|
||||||
* @return Return TRUE if the given Format objects are semantically equal.
|
* @return Return TRUE if the given Format objects are semantically equal.
|
||||||
* @stable ICU 50
|
* @stable ICU 50
|
||||||
@ -290,6 +290,18 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual UnicodeString& getDisplayName(const UnicodeString& tzID, UTimeZoneNameType type, UDate date, UnicodeString& name) const;
|
virtual UnicodeString& getDisplayName(const UnicodeString& tzID, UTimeZoneNameType type, UDate date, UnicodeString& name) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal For specific users only until proposed publicly.
|
||||||
|
* @deprecated This API is ICU internal only.
|
||||||
|
*/
|
||||||
|
virtual void loadAllDisplayNames(UErrorCode& status);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal For specific users only until proposed publicly.
|
||||||
|
* @deprecated This API is ICU internal only.
|
||||||
|
*/
|
||||||
|
virtual void getDisplayNames(const UnicodeString& tzID, const UTimeZoneNameType types[], int32_t numTypes, UDate date, UnicodeString dest[]) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>MatchInfoCollection</code> represents a collection of time zone name matches used by
|
* <code>MatchInfoCollection</code> represents a collection of time zone name matches used by
|
||||||
* {@link TimeZoneNames#find}.
|
* {@link TimeZoneNames#find}.
|
||||||
|
@ -833,7 +833,7 @@ TimeZoneFormatTest::TestParse(void) {
|
|||||||
delete tz;
|
delete tz;
|
||||||
} else {
|
} else {
|
||||||
if (DATA[i].expected) {
|
if (DATA[i].expected) {
|
||||||
errln((UnicodeString)"Fail: Parse failure - expected: " + DATA[i].expected);
|
errMsg = (UnicodeString)"Parse failure - expected: " + DATA[i].expected;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (errMsg.length() > 0) {
|
if (errMsg.length() > 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user