]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/i18n/dtitvinf.cpp
ICU-551.24.tar.gz
[apple/icu.git] / icuSources / i18n / dtitvinf.cpp
index 65be28469be4a007220a6db670131607590fc0a7..74f84882876d9757cd9de57c5171428cd11d7a7c 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
-* Copyright (C) 2008-2012, International Business Machines Corporation and
+* Copyright (C) 2008-2015, International Business Machines Corporation and
 * others. All Rights Reserved.
 *******************************************************************************
 *
@@ -223,7 +223,7 @@ DateIntervalInfo::initializeData(const Locale& locale, UErrorCode& err)
   char parentLocale[ULOC_FULLNAME_CAPACITY];
   uprv_strcpy(parentLocale, locName);
   UErrorCode status = U_ZERO_ERROR;
-  Hashtable skeletonSet(FALSE, status);
+  Hashtable skeletonKeyPairs(FALSE, status);
   if ( U_FAILURE(status) ) {
       return;
   }
@@ -277,10 +277,6 @@ DateIntervalInfo::initializeData(const Locale& locale, UErrorCode& err)
                     continue;
                 }
                 UnicodeString skeletonUniStr(skeleton, -1, US_INV);
-                if ( skeletonSet.geti(skeletonUniStr) == 1 ) {
-                    continue;
-                }
-                skeletonSet.puti(skeletonUniStr, 1, status);
                 if ( uprv_strcmp(skeleton, gFallbackPatternTag) == 0 ) {
                     continue;  // fallback
                 }
@@ -304,6 +300,12 @@ DateIntervalInfo::initializeData(const Locale& locale, UErrorCode& err)
                     if ( U_FAILURE(status) ) {
                         break;
                     }
+                    UnicodeString keyUniStr(key, -1, US_INV);
+                    UnicodeString skeletonKeyPair(skeletonUniStr + keyUniStr);
+                    if ( skeletonKeyPairs.geti(skeletonKeyPair) == 1 ) {
+                        continue;
+                    }
+                    skeletonKeyPairs.puti(skeletonKeyPair, 1, status);
         
                     UCalendarDateFields calendarField = UCAL_FIELD_COUNT;
                     if ( !uprv_strcmp(key, "y") ) {
@@ -481,7 +483,7 @@ DateIntervalInfo::getBestSkeleton(const UnicodeString& skeleton,
     bestMatchDistanceInfo = 0;
     int8_t fieldLength = sizeof(skeletonFieldWidth)/sizeof(skeletonFieldWidth[0]);
 
-    int32_t pos = -1;
+    int32_t pos = UHASH_FIRST;
     const UHashElement* elem = NULL;
     while ( (elem = fIntervalPatterns->nextElement(pos)) != NULL ) {
         const UHashTok keyTok = elem->key;
@@ -572,6 +574,9 @@ DateIntervalInfo::calendarFieldToIntervalIndex(UCalendarDateFields field,
       case UCAL_MINUTE:
         index = kIPI_MINUTE;
         break;
+      case UCAL_SECOND:
+        index = kIPI_SECOND;
+        break;
       default:
         status = U_ILLEGAL_ARGUMENT_ERROR;
     }
@@ -586,7 +591,7 @@ DateIntervalInfo::deleteHash(Hashtable* hTable)
     if ( hTable == NULL ) {
         return;
     }
-    int32_t pos = -1;
+    int32_t pos = UHASH_FIRST;
     const UHashElement* element = NULL;
     while ( (element = hTable->nextElement(pos)) != NULL ) {
         const UHashTok valueTok = element->value;
@@ -649,7 +654,7 @@ DateIntervalInfo::copyHash(const Hashtable* source,
     if ( U_FAILURE(status) ) {
         return;
     }
-    int32_t pos = -1;
+    int32_t pos = UHASH_FIRST;
     const UHashElement* element = NULL;
     if ( source ) {
         while ( (element = source->nextElement(pos)) != NULL ) {