Index: source/i18n/numsys.cpp |
diff --git a/source/i18n/numsys.cpp b/source/i18n/numsys.cpp |
index 288cc56309c7c91f80054f90016a3468add31ba2..ac3f498cd7712e8a43399cbc613ae6d388d5aa3a 100644 |
--- a/source/i18n/numsys.cpp |
+++ b/source/i18n/numsys.cpp |
@@ -1,6 +1,6 @@ |
/* |
******************************************************************************* |
-* Copyright (C) 2010-2013, International Business Machines Corporation and |
+* Copyright (C) 2010-2015, International Business Machines Corporation and |
* others. All Rights Reserved. |
******************************************************************************* |
* |
@@ -85,7 +85,7 @@ NumberingSystem::createInstance(int32_t radix_in, UBool isAlgorithmic_in, const |
} |
if ( !isAlgorithmic_in ) { |
- if ( desc_in.countChar32() != radix_in || !isValidDigitString(desc_in)) { |
+ if ( desc_in.countChar32() != radix_in ) { |
status = U_ILLEGAL_ARGUMENT_ERROR; |
return NULL; |
} |
@@ -244,7 +244,7 @@ UBool NumberingSystem::isAlgorithmic() const { |
} |
StringEnumeration* NumberingSystem::getAvailableNames(UErrorCode &status) { |
- |
+ // TODO(ticket #11908): Init-once static cache, with u_cleanup() callback. |
static StringEnumeration* availableNames = NULL; |
if (U_FAILURE(status)) { |
@@ -252,9 +252,9 @@ StringEnumeration* NumberingSystem::getAvailableNames(UErrorCode &status) { |
} |
if ( availableNames == NULL ) { |
- UVector *fNumsysNames = new UVector(uprv_deleteUObject, NULL, status); |
+ // TODO: Simple array of UnicodeString objects, based on length of table resource? |
+ LocalPointer<UVector> numsysNames(new UVector(uprv_deleteUObject, NULL, status), status); |
if (U_FAILURE(status)) { |
- status = U_MEMORY_ALLOCATION_ERROR; |
return NULL; |
} |
@@ -270,37 +270,28 @@ StringEnumeration* NumberingSystem::getAvailableNames(UErrorCode &status) { |
while ( ures_hasNext(numberingSystemsInfo) ) { |
UResourceBundle *nsCurrent = ures_getNextResource(numberingSystemsInfo,NULL,&rbstatus); |
const char *nsName = ures_getKey(nsCurrent); |
- fNumsysNames->addElement(new UnicodeString(nsName, -1, US_INV),status); |
+ numsysNames->addElement(new UnicodeString(nsName, -1, US_INV),status); |
ures_close(nsCurrent); |
} |
ures_close(numberingSystemsInfo); |
- availableNames = new NumsysNameEnumeration(fNumsysNames,status); |
- |
+ if (U_FAILURE(status)) { |
+ return NULL; |
+ } |
+ availableNames = new NumsysNameEnumeration(numsysNames.getAlias(), status); |
+ if (availableNames == NULL) { |
+ status = U_MEMORY_ALLOCATION_ERROR; |
+ return NULL; |
+ } |
+ numsysNames.orphan(); // The names got adopted. |
} |
return availableNames; |
} |
-UBool NumberingSystem::isValidDigitString(const UnicodeString& str) { |
- |
- StringCharacterIterator it(str); |
- UChar32 c; |
- int32_t i = 0; |
- |
- for ( it.setToStart(); it.hasNext(); ) { |
- c = it.next32PostInc(); |
- if ( c > 0xFFFF ) { // Digits outside the BMP are not currently supported |
- return FALSE; |
- } |
- i++; |
- } |
- return TRUE; |
-} |
- |
-NumsysNameEnumeration::NumsysNameEnumeration(UVector *fNameList, UErrorCode& /*status*/) { |
+NumsysNameEnumeration::NumsysNameEnumeration(UVector *numsysNames, UErrorCode& /*status*/) { |
pos=0; |
- fNumsysNames = fNameList; |
+ fNumsysNames = numsysNames; |
} |
const UnicodeString* |