- UResourceBundle* oneTimeUnit = ures_getByIndex(unitsRes, index,
- NULL, &status);
- if (U_SUCCESS(status)) {
- const char* timeUnitName = ures_getKey(oneTimeUnit);
- if (timeUnitName == NULL) {
- ures_close(oneTimeUnit);
- continue;
+ LocalUResourceBundlePointer oneTimeUnit(
+ ures_getByIndex(unitsRes.getAlias(), index, NULL, &status));
+ if (U_FAILURE(status)) {
+ continue;
+ }
+ const char* timeUnitName = ures_getKey(oneTimeUnit.getAlias());
+ if (timeUnitName == NULL) {
+ continue;
+ }
+ LocalUResourceBundlePointer countsToPatternRB(
+ ures_getByKey(unitsRes.getAlias(), timeUnitName, NULL, &status));
+ if (countsToPatternRB.isNull() || U_FAILURE(status)) {
+ continue;
+ }
+ TimeUnit::UTimeUnitFields timeUnitField = TimeUnit::UTIMEUNIT_FIELD_COUNT;
+ if ( uprv_strcmp(timeUnitName, gTimeUnitYear) == 0 ) {
+ timeUnitField = TimeUnit::UTIMEUNIT_YEAR;
+ } else if ( uprv_strcmp(timeUnitName, gTimeUnitMonth) == 0 ) {
+ timeUnitField = TimeUnit::UTIMEUNIT_MONTH;
+ } else if ( uprv_strcmp(timeUnitName, gTimeUnitDay) == 0 ) {
+ timeUnitField = TimeUnit::UTIMEUNIT_DAY;
+ } else if ( uprv_strcmp(timeUnitName, gTimeUnitHour) == 0 ) {
+ timeUnitField = TimeUnit::UTIMEUNIT_HOUR;
+ } else if ( uprv_strcmp(timeUnitName, gTimeUnitMinute) == 0 ) {
+ timeUnitField = TimeUnit::UTIMEUNIT_MINUTE;
+ } else if ( uprv_strcmp(timeUnitName, gTimeUnitSecond) == 0 ) {
+ timeUnitField = TimeUnit::UTIMEUNIT_SECOND;
+ } else if ( uprv_strcmp(timeUnitName, gTimeUnitWeek) == 0 ) {
+ timeUnitField = TimeUnit::UTIMEUNIT_WEEK;
+ } else {
+ continue;
+ }
+ LocalPointer<Hashtable> localCountToPatterns;
+ Hashtable *countToPatterns = fTimeUnitToCountToPatterns[timeUnitField];
+ if (countToPatterns == NULL) {
+ localCountToPatterns.adoptInsteadAndCheckErrorCode(initHash(err), err);
+ countToPatterns = localCountToPatterns.getAlias();
+ if (U_FAILURE(err)) {
+ return;