Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(257)

Side by Side Diff: source/i18n/dtptngen.cpp

Issue 1621843002: ICU 56 update step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@561
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « source/i18n/dtitvinf.cpp ('k') | source/i18n/dtptngen_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 ******************************************************************************* 2 *******************************************************************************
3 * Copyright (C) 2007-2014, International Business Machines Corporation and 3 * Copyright (C) 2007-2015, International Business Machines Corporation and
4 * others. All Rights Reserved. 4 * others. All Rights Reserved.
5 ******************************************************************************* 5 *******************************************************************************
6 * 6 *
7 * File DTPTNGEN.CPP 7 * File DTPTNGEN.CPP
8 * 8 *
9 ******************************************************************************* 9 *******************************************************************************
10 */ 10 */
11 11
12 #include "unicode/utypes.h" 12 #include "unicode/utypes.h"
13 #if !UCONFIG_NO_FORMATTING 13 #if !UCONFIG_NO_FORMATTING
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 return ret; 117 return ret;
118 #endif 118 #endif
119 } 119 }
120 120
121 121
122 #endif 122 #endif
123 123
124 124
125 U_NAMESPACE_BEGIN 125 U_NAMESPACE_BEGIN
126 126
127
128 // ***************************************************************************** 127 // *****************************************************************************
129 // class DateTimePatternGenerator 128 // class DateTimePatternGenerator
130 // ***************************************************************************** 129 // *****************************************************************************
131 static const UChar Canonical_Items[] = { 130 static const UChar Canonical_Items[] = {
132 // GyQMwWEdDFHmsSv 131 // GyQMwWEdDFHmsSv
133 CAP_G, LOW_Y, CAP_Q, CAP_M, LOW_W, CAP_W, CAP_E, LOW_D, CAP_D, CAP_F, 132 CAP_G, LOW_Y, CAP_Q, CAP_M, LOW_W, CAP_W, CAP_E, LOW_D, CAP_D, CAP_F,
134 CAP_H, LOW_M, LOW_S, CAP_S, LOW_V, 0 133 CAP_H, LOW_M, LOW_S, CAP_S, LOW_V, 0
135 }; 134 };
136 135
137 static const dtTypeElem dtTypes[] = { 136 static const dtTypeElem dtTypes[] = {
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(DTSkeletonEnumeration) 237 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(DTSkeletonEnumeration)
239 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(DTRedundantEnumeration) 238 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(DTRedundantEnumeration)
240 239
241 DateTimePatternGenerator* U_EXPORT2 240 DateTimePatternGenerator* U_EXPORT2
242 DateTimePatternGenerator::createInstance(UErrorCode& status) { 241 DateTimePatternGenerator::createInstance(UErrorCode& status) {
243 return createInstance(Locale::getDefault(), status); 242 return createInstance(Locale::getDefault(), status);
244 } 243 }
245 244
246 DateTimePatternGenerator* U_EXPORT2 245 DateTimePatternGenerator* U_EXPORT2
247 DateTimePatternGenerator::createInstance(const Locale& locale, UErrorCode& statu s) { 246 DateTimePatternGenerator::createInstance(const Locale& locale, UErrorCode& statu s) {
248 DateTimePatternGenerator *result = new DateTimePatternGenerator(locale, stat us); 247 if (U_FAILURE(status)) {
249 if (result == NULL) { 248 return NULL;
250 status = U_MEMORY_ALLOCATION_ERROR;
251 } 249 }
252 if (U_FAILURE(status)) { 250 LocalPointer<DateTimePatternGenerator> result(
253 delete result; 251 new DateTimePatternGenerator(locale, status), status);
254 result = NULL; 252 return U_SUCCESS(status) ? result.orphan() : NULL;
255 }
256 return result;
257 } 253 }
258 254
259 DateTimePatternGenerator* U_EXPORT2 255 DateTimePatternGenerator* U_EXPORT2
260 DateTimePatternGenerator::createEmptyInstance(UErrorCode& status) { 256 DateTimePatternGenerator::createEmptyInstance(UErrorCode& status) {
261 DateTimePatternGenerator *result = new DateTimePatternGenerator(status); 257 DateTimePatternGenerator *result = new DateTimePatternGenerator(status);
262 if (result == NULL) { 258 if (result == NULL) {
263 status = U_MEMORY_ALLOCATION_ERROR; 259 status = U_MEMORY_ALLOCATION_ERROR;
264 } 260 }
265 if (U_FAILURE(status)) { 261 if (U_FAILURE(status)) {
266 delete result; 262 delete result;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 { 301 {
306 fp = new FormatParser(); 302 fp = new FormatParser();
307 dtMatcher = new DateTimeMatcher(); 303 dtMatcher = new DateTimeMatcher();
308 distanceInfo = new DistanceInfo(); 304 distanceInfo = new DistanceInfo();
309 patternMap = new PatternMap(); 305 patternMap = new PatternMap();
310 *this=other; 306 *this=other;
311 } 307 }
312 308
313 DateTimePatternGenerator& 309 DateTimePatternGenerator&
314 DateTimePatternGenerator::operator=(const DateTimePatternGenerator& other) { 310 DateTimePatternGenerator::operator=(const DateTimePatternGenerator& other) {
311 // reflexive case
312 if (&other == this) {
313 return *this;
314 }
315 pLocale = other.pLocale; 315 pLocale = other.pLocale;
316 fDefaultHourFormatChar = other.fDefaultHourFormatChar; 316 fDefaultHourFormatChar = other.fDefaultHourFormatChar;
317 *fp = *(other.fp); 317 *fp = *(other.fp);
318 dtMatcher->copyFrom(other.dtMatcher->skeleton); 318 dtMatcher->copyFrom(other.dtMatcher->skeleton);
319 *distanceInfo = *(other.distanceInfo); 319 *distanceInfo = *(other.distanceInfo);
320 dateTimeFormat = other.dateTimeFormat; 320 dateTimeFormat = other.dateTimeFormat;
321 decimal = other.decimal; 321 decimal = other.decimal;
322 // NUL-terminate for the C API. 322 // NUL-terminate for the C API.
323 dateTimeFormat.getTerminatedBuffer(); 323 dateTimeFormat.getTerminatedBuffer();
324 decimal.getTerminatedBuffer(); 324 decimal.getTerminatedBuffer();
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 addICUPatterns(locale, status); 390 addICUPatterns(locale, status);
391 if (U_FAILURE(status)) { 391 if (U_FAILURE(status)) {
392 return; 392 return;
393 } 393 }
394 addCLDRData(locale, status); 394 addCLDRData(locale, status);
395 setDateTimeFromCalendar(locale, status); 395 setDateTimeFromCalendar(locale, status);
396 setDecimalSymbols(locale, status); 396 setDecimalSymbols(locale, status);
397 } // DateTimePatternGenerator::initData 397 } // DateTimePatternGenerator::initData
398 398
399 UnicodeString 399 UnicodeString
400 DateTimePatternGenerator::getSkeleton(const UnicodeString& pattern, UErrorCode& 400 DateTimePatternGenerator::staticGetSkeleton(
401 /*status*/) { 401 const UnicodeString& pattern, UErrorCode& /*status*/) {
402 dtMatcher->set(pattern, fp); 402 FormatParser fp;
403 return dtMatcher->getSkeletonPtr()->getSkeleton(); 403 DateTimeMatcher matcher;
404 PtnSkeleton localSkeleton;
405 matcher.set(pattern, &fp, localSkeleton);
406 return localSkeleton.getSkeleton();
404 } 407 }
405 408
406 UnicodeString 409 UnicodeString
407 DateTimePatternGenerator::getBaseSkeleton(const UnicodeString& pattern, UErrorCo de& /*status*/) { 410 DateTimePatternGenerator::staticGetBaseSkeleton(
408 dtMatcher->set(pattern, fp); 411 const UnicodeString& pattern, UErrorCode& /*status*/) {
409 return dtMatcher->getSkeletonPtr()->getBaseSkeleton(); 412 FormatParser fp;
413 DateTimeMatcher matcher;
414 PtnSkeleton localSkeleton;
415 matcher.set(pattern, &fp, localSkeleton);
416 return localSkeleton.getBaseSkeleton();
410 } 417 }
411 418
412 void 419 void
413 DateTimePatternGenerator::addICUPatterns(const Locale& locale, UErrorCode& statu s) { 420 DateTimePatternGenerator::addICUPatterns(const Locale& locale, UErrorCode& statu s) {
414 UnicodeString dfPattern; 421 UnicodeString dfPattern;
415 UnicodeString conflictingString; 422 UnicodeString conflictingString;
416 DateFormat* df; 423 DateFormat* df;
417 424
418 if (U_FAILURE(status)) { 425 if (U_FAILURE(status)) {
419 return; 426 return;
(...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after
1210 return; 1217 return;
1211 } 1218 }
1212 if (fAvailableFormatKeyHash != NULL) { 1219 if (fAvailableFormatKeyHash != NULL) {
1213 delete fAvailableFormatKeyHash; 1220 delete fAvailableFormatKeyHash;
1214 fAvailableFormatKeyHash = NULL; 1221 fAvailableFormatKeyHash = NULL;
1215 } 1222 }
1216 initHashtable(status); 1223 initHashtable(status);
1217 if(U_FAILURE(status)){ 1224 if(U_FAILURE(status)){
1218 return; 1225 return;
1219 } 1226 }
1220 int32_t pos = -1; 1227 int32_t pos = UHASH_FIRST;
1221 const UHashElement* elem = NULL; 1228 const UHashElement* elem = NULL;
1222 // walk through the hash table and create a deep clone 1229 // walk through the hash table and create a deep clone
1223 while((elem = other->nextElement(pos))!= NULL){ 1230 while((elem = other->nextElement(pos))!= NULL){
1224 const UHashTok otherKeyTok = elem->key; 1231 const UHashTok otherKeyTok = elem->key;
1225 UnicodeString* otherKey = (UnicodeString*)otherKeyTok.pointer; 1232 UnicodeString* otherKey = (UnicodeString*)otherKeyTok.pointer;
1226 fAvailableFormatKeyHash->puti(*otherKey, 1, status); 1233 fAvailableFormatKeyHash->puti(*otherKey, 1, status);
1227 if(U_FAILURE(status)){ 1234 if(U_FAILURE(status)){
1228 return; 1235 return;
1229 } 1236 }
1230 } 1237 }
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
1326 return; 1333 return;
1327 } 1334 }
1328 if ( this->boot[bootIndex]== NULL ) { 1335 if ( this->boot[bootIndex]== NULL ) {
1329 this->boot[bootIndex] = curElem; 1336 this->boot[bootIndex] = curElem;
1330 } 1337 }
1331 if ((curElem->skeleton=new PtnSkeleton(*(otherElem->skeleton))) == N ULL ) { 1338 if ((curElem->skeleton=new PtnSkeleton(*(otherElem->skeleton))) == N ULL ) {
1332 // out of memory 1339 // out of memory
1333 status = U_MEMORY_ALLOCATION_ERROR; 1340 status = U_MEMORY_ALLOCATION_ERROR;
1334 return; 1341 return;
1335 } 1342 }
1336 1343 curElem->skeletonWasSpecified = otherElem->skeletonWasSpecified;
1337 if (prevElem!=NULL) { 1344 if (prevElem!=NULL) {
1338 prevElem->next=curElem; 1345 prevElem->next=curElem;
1339 } 1346 }
1340 curElem->next=NULL; 1347 curElem->next=NULL;
1341 prevElem = curElem; 1348 prevElem = curElem;
1342 otherElem = otherElem->next; 1349 otherElem = otherElem->next;
1343 } 1350 }
1344 1351
1345 } 1352 }
1346 } 1353 }
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after
1833 if (dtTypes[i+1].minLen <= len) { 1840 if (dtTypes[i+1].minLen <= len) {
1834 ++i; 1841 ++i;
1835 continue; 1842 continue;
1836 } 1843 }
1837 return i; 1844 return i;
1838 } 1845 }
1839 return strict ? -1 : bestRow; 1846 return strict ? -1 : bestRow;
1840 } 1847 }
1841 1848
1842 UBool 1849 UBool
1843 FormatParser::isQuoteLiteral(const UnicodeString& s) const { 1850 FormatParser::isQuoteLiteral(const UnicodeString& s) {
1844 return (UBool)(s.charAt(0)==SINGLE_QUOTE); 1851 return (UBool)(s.charAt(0)==SINGLE_QUOTE);
1845 } 1852 }
1846 1853
1847 // This function aussumes the current itemIndex points to the quote literal. 1854 // This function aussumes the current itemIndex points to the quote literal.
1848 // Please call isQuoteLiteral prior to this function. 1855 // Please call isQuoteLiteral prior to this function.
1849 void 1856 void
1850 FormatParser::getQuoteLiteral(UnicodeString& quote, int32_t *itemIndex) { 1857 FormatParser::getQuoteLiteral(UnicodeString& quote, int32_t *itemIndex) {
1851 int32_t i=*itemIndex; 1858 int32_t i=*itemIndex;
1852 1859
1853 quote.remove(); 1860 quote.remove();
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
2208 } 2215 }
2209 delete fPatterns; 2216 delete fPatterns;
2210 } 2217 }
2211 2218
2212 U_NAMESPACE_END 2219 U_NAMESPACE_END
2213 2220
2214 2221
2215 #endif /* #if !UCONFIG_NO_FORMATTING */ 2222 #endif /* #if !UCONFIG_NO_FORMATTING */
2216 2223
2217 //eof 2224 //eof
OLDNEW
« no previous file with comments | « source/i18n/dtitvinf.cpp ('k') | source/i18n/dtptngen_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698