Remove ICU C++ LocaleDisplayNames
authorMatt Ellis <matell@microsoft.com>
Thu, 15 Oct 2015 23:00:35 +0000 (16:00 -0700)
committerMatt Ellis <matell@microsoft.com>
Wed, 21 Oct 2015 20:49:00 +0000 (13:49 -0700)
src/corefx/System.Globalization.Native/calendarData.cpp
src/corefx/System.Globalization.Native/holders.h

index 75336d1..27f51bf 100644 (file)
@@ -271,13 +271,11 @@ Gets the native calendar name.
 CalendarDataResult
 GetNativeCalendarName(Locale& locale, CalendarId calendarId, UChar* nativeName, int32_t stringCapacity)
 {
-    LocalPointer<LocaleDisplayNames> displayNames(LocaleDisplayNames::createInstance(locale));
-
-    UnicodeString calendarName;
-    displayNames->keyValueDisplayName("calendar", GetCalendarName(calendarId), calendarName);
-
     UErrorCode err = U_ZERO_ERROR;
-    calendarName.extract(nativeName, stringCapacity, err);
+    ULocaleDisplayNames* pDisplayNames = uldn_open(locale.getName(), ULDN_STANDARD_NAMES, &err);
+    ULocaleDisplayNamesHolder displayNamesHolder(pDisplayNames, err);
+
+    uldn_keyValueDisplayName(pDisplayNames, "calendar", GetCalendarName(calendarId), nativeName, stringCapacity, &err);
 
     return GetCalendarDataResult(err);
 }
index 2606e48..0658e55 100644 (file)
@@ -8,6 +8,7 @@
 #include "unicode/udatpg.h"
 #include "unicode/udat.h"
 #include "unicode/unum.h"
+#include "unicode/uldnames.h"
 
 // IcuHolder is a template that can manage the lifetime of a raw pointer to ensure that it is cleaned up at the correct
 // time.  The general usage pattern is to aquire some ICU resource via an _open call, then construct a holder using the
@@ -80,8 +81,17 @@ struct UNumberFormatCloser
     }
 };
 
+struct ULocaleDisplayNamesCloser
+{
+    void operator()(ULocaleDisplayNames* pLocaleDisplayNames) const
+    {
+        uldn_close(pLocaleDisplayNames);
+    }
+};
+
 typedef IcuHolder<UCalendar, UCalendarCloser> UCalendarHolder;
 typedef IcuHolder<UEnumeration, UEnumerationCloser> UEnumerationHolder;
 typedef IcuHolder<UDateTimePatternGenerator, UDateTimePatternGeneratorCloser> UDateTimePatternGeneratorHolder;
 typedef IcuHolder<UDateFormat, UDateFormatCloser> UDateFormatHolder;
 typedef IcuHolder<UNumberFormat, UNumberFormatCloser> UNumberFormatHolder;
+typedef IcuHolder<ULocaleDisplayNames, ULocaleDisplayNamesCloser> ULocaleDisplayNamesHolder;