Index: source/i18n/dtptngen.cpp |
diff --git a/source/i18n/dtptngen.cpp b/source/i18n/dtptngen.cpp |
index fe1f5a150f6359eb5399b0b408309e38389a3448..0a7d4b3833bab732f2e306cd6878284fc969ea52 100644 |
--- a/source/i18n/dtptngen.cpp |
+++ b/source/i18n/dtptngen.cpp |
@@ -1,6 +1,6 @@ |
/* |
******************************************************************************* |
-* Copyright (C) 2007-2014, International Business Machines Corporation and |
+* Copyright (C) 2007-2015, International Business Machines Corporation and |
* others. All Rights Reserved. |
******************************************************************************* |
* |
@@ -124,7 +124,6 @@ static const UChar *ures_a_getNextString(UResourceBundleAIterator *aiter, int32_ |
U_NAMESPACE_BEGIN |
- |
// ***************************************************************************** |
// class DateTimePatternGenerator |
// ***************************************************************************** |
@@ -245,15 +244,12 @@ DateTimePatternGenerator::createInstance(UErrorCode& status) { |
DateTimePatternGenerator* U_EXPORT2 |
DateTimePatternGenerator::createInstance(const Locale& locale, UErrorCode& status) { |
- DateTimePatternGenerator *result = new DateTimePatternGenerator(locale, status); |
- if (result == NULL) { |
- status = U_MEMORY_ALLOCATION_ERROR; |
- } |
if (U_FAILURE(status)) { |
- delete result; |
- result = NULL; |
+ return NULL; |
} |
- return result; |
+ LocalPointer<DateTimePatternGenerator> result( |
+ new DateTimePatternGenerator(locale, status), status); |
+ return U_SUCCESS(status) ? result.orphan() : NULL; |
} |
DateTimePatternGenerator* U_EXPORT2 |
@@ -312,6 +308,10 @@ DateTimePatternGenerator::DateTimePatternGenerator(const DateTimePatternGenerato |
DateTimePatternGenerator& |
DateTimePatternGenerator::operator=(const DateTimePatternGenerator& other) { |
+ // reflexive case |
+ if (&other == this) { |
+ return *this; |
+ } |
pLocale = other.pLocale; |
fDefaultHourFormatChar = other.fDefaultHourFormatChar; |
*fp = *(other.fp); |
@@ -397,16 +397,23 @@ DateTimePatternGenerator::initData(const Locale& locale, UErrorCode &status) { |
} // DateTimePatternGenerator::initData |
UnicodeString |
-DateTimePatternGenerator::getSkeleton(const UnicodeString& pattern, UErrorCode& |
-/*status*/) { |
- dtMatcher->set(pattern, fp); |
- return dtMatcher->getSkeletonPtr()->getSkeleton(); |
+DateTimePatternGenerator::staticGetSkeleton( |
+ const UnicodeString& pattern, UErrorCode& /*status*/) { |
+ FormatParser fp; |
+ DateTimeMatcher matcher; |
+ PtnSkeleton localSkeleton; |
+ matcher.set(pattern, &fp, localSkeleton); |
+ return localSkeleton.getSkeleton(); |
} |
UnicodeString |
-DateTimePatternGenerator::getBaseSkeleton(const UnicodeString& pattern, UErrorCode& /*status*/) { |
- dtMatcher->set(pattern, fp); |
- return dtMatcher->getSkeletonPtr()->getBaseSkeleton(); |
+DateTimePatternGenerator::staticGetBaseSkeleton( |
+ const UnicodeString& pattern, UErrorCode& /*status*/) { |
+ FormatParser fp; |
+ DateTimeMatcher matcher; |
+ PtnSkeleton localSkeleton; |
+ matcher.set(pattern, &fp, localSkeleton); |
+ return localSkeleton.getBaseSkeleton(); |
} |
void |
@@ -1217,7 +1224,7 @@ DateTimePatternGenerator::copyHashtable(Hashtable *other, UErrorCode &status) { |
if(U_FAILURE(status)){ |
return; |
} |
- int32_t pos = -1; |
+ int32_t pos = UHASH_FIRST; |
const UHashElement* elem = NULL; |
// walk through the hash table and create a deep clone |
while((elem = other->nextElement(pos))!= NULL){ |
@@ -1333,7 +1340,7 @@ PatternMap::copyFrom(const PatternMap& other, UErrorCode& status) { |
status = U_MEMORY_ALLOCATION_ERROR; |
return; |
} |
- |
+ curElem->skeletonWasSpecified = otherElem->skeletonWasSpecified; |
if (prevElem!=NULL) { |
prevElem->next=curElem; |
} |
@@ -1840,7 +1847,7 @@ FormatParser::getCanonicalIndex(const UnicodeString& s, UBool strict) { |
} |
UBool |
-FormatParser::isQuoteLiteral(const UnicodeString& s) const { |
+FormatParser::isQuoteLiteral(const UnicodeString& s) { |
return (UBool)(s.charAt(0)==SINGLE_QUOTE); |
} |