From 2442c948bac01d05403ea15af3aa934e466f29af Mon Sep 17 00:00:00 2001 From: vladislavbelov Date: Tue, 10 Jan 2023 22:19:56 +0000 Subject: [PATCH] No owning raw pointers in L10n.cpp. Patch By: phosit Differential Revision: https://code.wildfiregames.com/D4823 This was SVN commit r27413. --- source/i18n/L10n.cpp | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/source/i18n/L10n.cpp b/source/i18n/L10n.cpp index 070c74836f..5a57e00b2c 100644 --- a/source/i18n/L10n.cpp +++ b/source/i18n/L10n.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2022 Wildfire Games. +/* Copyright (C) 2023 Wildfire Games. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the @@ -116,19 +116,22 @@ void ReadPoIntoDictionary(const std::string& poContent, tinygettext::Dictionary* * parsing. * @return ICU date formatter. */ -icu::DateFormat* CreateDateTimeInstance(const L10n::DateTimeType& type, const icu::DateFormat::EStyle& style, const icu::Locale& locale) +std::unique_ptr CreateDateTimeInstance(const L10n::DateTimeType& type, const icu::DateFormat::EStyle& style, const icu::Locale& locale) { switch (type) { case L10n::Date: - return icu::SimpleDateFormat::createDateInstance(style, locale); + return std::unique_ptr{ + icu::SimpleDateFormat::createDateInstance(style, locale)}; case L10n::Time: - return icu::SimpleDateFormat::createTimeInstance(style, locale); + return std::unique_ptr{ + icu::SimpleDateFormat::createTimeInstance(style, locale)}; - case L10n::DateTime: + case L10n::DateTime: FALLTHROUGH; default: - return icu::SimpleDateFormat::createDateTimeInstance(style, style, locale); + return std::unique_ptr{ + icu::SimpleDateFormat::createDateTimeInstance(style, style, locale)}; } } @@ -446,24 +449,21 @@ UDate L10n::ParseDateTime(const std::string& dateTimeString, const std::string& icu::UnicodeString utf16DateTimeString = icu::UnicodeString::fromUTF8(dateTimeString.c_str()); icu::UnicodeString utf16DateTimeFormat = icu::UnicodeString::fromUTF8(dateTimeFormat.c_str()); - icu::DateFormat* dateFormatter = new icu::SimpleDateFormat(utf16DateTimeFormat, locale, success); - UDate date = dateFormatter->parse(utf16DateTimeString, success); - delete dateFormatter; - - return date; + const icu::SimpleDateFormat dateFormatter{utf16DateTimeFormat, locale, success}; + return dateFormatter.parse(utf16DateTimeString, success); } std::string L10n::LocalizeDateTime(const UDate dateTime, const DateTimeType& type, const icu::DateFormat::EStyle& style) const { icu::UnicodeString utf16Date; - icu::DateFormat* dateFormatter = CreateDateTimeInstance(type, style, m_CurrentLocale); + const std::unique_ptr dateFormatter{ + CreateDateTimeInstance(type, style, m_CurrentLocale)}; dateFormatter->format(dateTime, utf16Date); char utf8Date[512]; icu::CheckedArrayByteSink sink(utf8Date, ARRAY_SIZE(utf8Date)); utf16Date.toUTF8(sink); ENSURE(!sink.Overflowed()); - delete dateFormatter; return std::string(utf8Date, sink.NumberOfBytesWritten()); } @@ -475,21 +475,21 @@ std::string L10n::FormatMillisecondsIntoDateString(const UDate milliseconds, con std::string resultString; icu::UnicodeString unicodeFormat = icu::UnicodeString::fromUTF8(formatString.c_str()); - icu::SimpleDateFormat* dateFormat = new icu::SimpleDateFormat(unicodeFormat, status); + icu::SimpleDateFormat dateFormat{unicodeFormat, status}; if (U_FAILURE(status)) LOGERROR("Error creating SimpleDateFormat: %s", u_errorName(status)); status = U_ZERO_ERROR; - icu::Calendar* calendar = useLocalTimezone ? - icu::Calendar::createInstance(m_CurrentLocale, status) : - icu::Calendar::createInstance(*icu::TimeZone::getGMT(), m_CurrentLocale, status); + std::unique_ptr calendar{ + useLocalTimezone ? + icu::Calendar::createInstance(m_CurrentLocale, status) : + icu::Calendar::createInstance(*icu::TimeZone::getGMT(), m_CurrentLocale, status)}; if (U_FAILURE(status)) LOGERROR("Error creating calendar: %s", u_errorName(status)); - dateFormat->adoptCalendar(calendar); - dateFormat->format(milliseconds, dateString); - delete dateFormat; + dateFormat.adoptCalendar(calendar.release()); + dateFormat.format(milliseconds, dateString); dateString.toUTF8String(resultString); return resultString; @@ -499,8 +499,8 @@ std::string L10n::FormatDecimalNumberIntoString(double number) const { UErrorCode success = U_ZERO_ERROR; icu::UnicodeString utf16Number; - icu::NumberFormat* numberFormatter = icu::NumberFormat::createInstance(m_CurrentLocale, - UNUM_DECIMAL, success); + std::unique_ptr numberFormatter{ + icu::NumberFormat::createInstance(m_CurrentLocale, UNUM_DECIMAL, success)}; numberFormatter->format(number, utf16Number); char utf8Number[512]; icu::CheckedArrayByteSink sink(utf8Number, ARRAY_SIZE(utf8Number));