From 5b8885d2031dbd0e98db128a0c5ee3c3b6124a05 Mon Sep 17 00:00:00 2001 From: the-minions-of-cplu Date: Sun, 11 Jul 2021 20:37:58 +0800 Subject: [PATCH] optimize code and rename some functions Signed-off-by: the-minions-of-cplu --- frameworks/i18n/include/str_util.h | 8 +- frameworks/i18n/src/date_time_data.cpp | 28 ++--- frameworks/i18n/src/date_time_format_impl.cpp | 2 +- frameworks/i18n/src/locale_info.cpp | 100 ++++++++---------- frameworks/i18n/src/number_data.cpp | 69 ++++++------ frameworks/i18n/src/number_format_impl.cpp | 8 +- frameworks/i18n/src/plural_format_impl.cpp | 2 +- frameworks/i18n/src/str_util.cpp | 78 +++++--------- interfaces/kits/i18n/include/locale_info.h | 2 +- 9 files changed, 129 insertions(+), 168 deletions(-) diff --git a/frameworks/i18n/include/str_util.h b/frameworks/i18n/include/str_util.h index 57e796f..0a56420 100755 --- a/frameworks/i18n/include/str_util.h +++ b/frameworks/i18n/include/str_util.h @@ -18,23 +18,19 @@ #include #include "types.h" -#define I18N_STRING_LENGTH_MAX 512 - namespace OHOS { namespace I18N { int ReplaceAndCountOff(std::string &content, const int index, const char *sign, const int off); void ArrayCopy(std::string *target, const int targetSize, const std::string *source, const int sourceSize); -char *NewArrayAndCopy(const char *source, const int len); - char *I18nNewCharString(const char *source, const int len); bool CleanCharArray(char *target, const int len); -int LenCharArray(const char *target); +int I18nStrlen(const char *target); -void Split(const std::string &src, std::string *dst, const int32_t size, const char &sep); +void I18nSplitString(const std::string &src, std::string * const dst, const int32_t size, const char &sep); bool CompareLocaleItem(const char *src, const char* dst); diff --git a/frameworks/i18n/src/date_time_data.cpp b/frameworks/i18n/src/date_time_data.cpp index 34e4825..3be591f 100755 --- a/frameworks/i18n/src/date_time_data.cpp +++ b/frameworks/i18n/src/date_time_data.cpp @@ -26,7 +26,7 @@ DateTimeData::DateTimeData(const char *amPmMarkers, const char *sepAndHour, cons if (amPmMarkers != nullptr) { size_t len = strlen(const_cast(amPmMarkers)); if (len > 0) { - this->amPmMarkers = NewArrayAndCopy(amPmMarkers, len); + this->amPmMarkers = I18nNewCharString(amPmMarkers, len); } } // size must >= 2, The first 2 element of sepAndHour need to be extracted, the first element @@ -122,12 +122,12 @@ void DateTimeData::SetMonthNamesData(const char *formatAbbreviatedMonthNames, co (standaloneAbbreviatedMonthNames == nullptr) || (standaloneWideMonthNames == nullptr)) { return; } - this->formatAbbreviatedMonthNames = NewArrayAndCopy(formatAbbreviatedMonthNames, + this->formatAbbreviatedMonthNames = I18nNewCharString(formatAbbreviatedMonthNames, strlen(formatAbbreviatedMonthNames)); - this->formatWideMonthNames = NewArrayAndCopy(formatWideMonthNames, strlen(formatWideMonthNames)); - this->standaloneAbbreviatedMonthNames = NewArrayAndCopy(standaloneAbbreviatedMonthNames, + this->formatWideMonthNames = I18nNewCharString(formatWideMonthNames, strlen(formatWideMonthNames)); + this->standaloneAbbreviatedMonthNames = I18nNewCharString(standaloneAbbreviatedMonthNames, strlen(standaloneAbbreviatedMonthNames)); - this->standaloneWideMonthNames = NewArrayAndCopy(standaloneWideMonthNames, strlen(standaloneWideMonthNames)); + this->standaloneWideMonthNames = I18nNewCharString(standaloneWideMonthNames, strlen(standaloneWideMonthNames)); } void DateTimeData::SetDayNamesData(const char *formatAbbreviatedDayNames, const char *formatWideDayNames, @@ -137,12 +137,12 @@ void DateTimeData::SetDayNamesData(const char *formatAbbreviatedDayNames, const (standaloneAbbreviatedDayNames == nullptr) || (standaloneWideDayNames == nullptr)) { return; } - this->formatAbbreviatedDayNames = NewArrayAndCopy(formatAbbreviatedDayNames, + this->formatAbbreviatedDayNames = I18nNewCharString(formatAbbreviatedDayNames, strlen(formatAbbreviatedDayNames)); - this->formatWideDayNames = NewArrayAndCopy(formatWideDayNames, strlen(formatWideDayNames)); - this->standaloneAbbreviatedDayNames = NewArrayAndCopy(standaloneAbbreviatedDayNames, + this->formatWideDayNames = I18nNewCharString(formatWideDayNames, strlen(formatWideDayNames)); + this->standaloneAbbreviatedDayNames = I18nNewCharString(standaloneAbbreviatedDayNames, strlen(standaloneAbbreviatedDayNames)); - this->standaloneWideDayNames = NewArrayAndCopy(standaloneWideDayNames, strlen(standaloneWideDayNames)); + this->standaloneWideDayNames = I18nNewCharString(standaloneWideDayNames, strlen(standaloneWideDayNames)); } void DateTimeData::SetPatternsData(const char *datePatterns, const char *timePatterns, @@ -162,13 +162,13 @@ void DateTimeData::SetPatternsData(const char *datePatterns, const char *timePat return; } I18nFree(this->timePatterns); - this->timePatterns = NewArrayAndCopy(timePatterns, timeLength); + this->timePatterns = I18nNewCharString(timePatterns, timeLength); I18nFree(this->datePatterns); - this->datePatterns = NewArrayAndCopy(datePatterns, dateLength); + this->datePatterns = I18nNewCharString(datePatterns, dateLength); I18nFree(this->hourMinuteSecondPatterns); - this->hourMinuteSecondPatterns = NewArrayAndCopy(hourMinuteSecondPatterns, hourLength); + this->hourMinuteSecondPatterns = I18nNewCharString(hourMinuteSecondPatterns, hourLength); I18nFree(this->fullMediumShortPatterns); - this->fullMediumShortPatterns = NewArrayAndCopy(fullMediumShortPatterns, fullLength); + this->fullMediumShortPatterns = I18nNewCharString(fullMediumShortPatterns, fullLength); I18nFree(this->elapsedPatterns); - this->elapsedPatterns = NewArrayAndCopy(elapsedPatterns, elapsedLength); + this->elapsedPatterns = I18nNewCharString(elapsedPatterns, elapsedLength); } diff --git a/frameworks/i18n/src/date_time_format_impl.cpp b/frameworks/i18n/src/date_time_format_impl.cpp index 1be7781..08da21f 100755 --- a/frameworks/i18n/src/date_time_format_impl.cpp +++ b/frameworks/i18n/src/date_time_format_impl.cpp @@ -290,7 +290,7 @@ void DateTimeFormatImpl::ProcessWeekDayYear(const tm &time, string &appendTo, ch } break; } - // case 'c': + // case 'E': case 'e': case 'E': { int32_t weekDay = time.tm_wday; diff --git a/frameworks/i18n/src/locale_info.cpp b/frameworks/i18n/src/locale_info.cpp index 639297d..40bce29 100755 --- a/frameworks/i18n/src/locale_info.cpp +++ b/frameworks/i18n/src/locale_info.cpp @@ -36,29 +36,27 @@ using namespace OHOS::I18N; void LocaleInfo::Init(const char *newLang, const char *newScript, const char *newRegion, int &status) { - id = nullptr; status = IERROR; if (newLang == nullptr) { return; } - int langLength = LenCharArray(newLang); + int langLength = I18nStrlen(newLang); // language consists of two or three letters if ((langLength > LANGUAGE_MAX_LENGTH) || (langLength < LANGUAGE_MIN_LENGTH)) { return; } I18nFree(language); - int idLength = langLength; - language = NewArrayAndCopy(newLang, langLength); + language = I18nNewCharString(newLang, langLength); if (newScript != nullptr) { - int scriptLength = LenCharArray(newScript); + int scriptLength = I18nStrlen(newScript); if (scriptLength == SCRIPT_LENGTH) { - script = NewArrayAndCopy(newScript, scriptLength); + script = I18nNewCharString(newScript, scriptLength); } } if (newRegion != nullptr) { - int regionLength = LenCharArray(newRegion); + int regionLength = I18nStrlen(newRegion); if (regionLength == REGION_LENGTH) { - region = NewArrayAndCopy(newRegion, regionLength); + region = I18nNewCharString(newRegion, regionLength); } } InitIdstr(); @@ -72,14 +70,14 @@ void LocaleInfo::InitIdstr() } std::string idStr(language); // script consists of four letters - if ((script != nullptr) && (LenCharArray(script) > 0)) { + if ((script != nullptr) && (I18nStrlen(script) > 0)) { idStr = idStr + "-" + script; } - if ((region != nullptr) && (LenCharArray(region) > 0)) { + if ((region != nullptr) && (I18nStrlen(region) > 0)) { idStr = idStr + "-" + region; } I18nFree(id); - id = NewArrayAndCopy(idStr.data(), idStr.size()); + id = I18nNewCharString(idStr.data(), idStr.size()); } LocaleInfo::LocaleInfo(const char *newLang, const char *newScript, const char *newRegion) @@ -87,7 +85,7 @@ LocaleInfo::LocaleInfo(const char *newLang, const char *newScript, const char *n int status = ISUCCESS; Init(newLang, newScript, newRegion, status); if (status != ISUCCESS) { - SetFail(); + isSucc = false; } } @@ -104,14 +102,14 @@ LocaleInfo::LocaleInfo(const char *newLang, const char *newRegion) int status = ISUCCESS; Init(newLang, nullptr, newRegion, status); if (status != ISUCCESS) { - SetFail(); + isSucc = false; } } LocaleInfo::LocaleInfo() { id = nullptr; - SetFail(); + isSucc = false; } LocaleInfo::LocaleInfo(const LocaleInfo &o) @@ -119,24 +117,22 @@ LocaleInfo::LocaleInfo(const LocaleInfo &o) int status = ISUCCESS; Init(o.language, o.script, o.region, status); if (status != ISUCCESS) { - SetFail(); + isSucc = false; } } LocaleInfo::~LocaleInfo() { - if (language != nullptr) { - I18nFree(language); - } - if (script != nullptr) { - I18nFree(script); - } - if (region != nullptr) { - I18nFree(region); - } - if (id != nullptr) { - I18nFree(id); - } + FreeResources(); +} + +void LocaleInfo::FreeResources() +{ + I18nFree(language); + I18nFree(script); + I18nFree(region); + I18nFree(id); + I18nFree(numberDigits); } bool LocaleInfo::operator == (const LocaleInfo &other) const @@ -158,25 +154,21 @@ LocaleInfo &LocaleInfo::operator = (const LocaleInfo &o) if (&o == this) { return *this; } - I18nFree(language); - I18nFree(script); - I18nFree(region); - I18nFree(id); - I18nFree(numberDigits); + FreeResources(); if (o.language != nullptr) { - language = NewArrayAndCopy(o.language, strlen(o.language)); + language = I18nNewCharString(o.language, strlen(o.language)); } if (o.script != nullptr) { - script = NewArrayAndCopy(o.script, strlen(o.script)); + script = I18nNewCharString(o.script, strlen(o.script)); } if (o.region != nullptr) { - region = NewArrayAndCopy(o.region, strlen(o.region)); + region = I18nNewCharString(o.region, strlen(o.region)); } if (o.id != nullptr) { - id = NewArrayAndCopy(o.id, LenCharArray(o.id)); + id = I18nNewCharString(o.id, I18nStrlen(o.id)); } if (o.numberDigits != nullptr) { - numberDigits = NewArrayAndCopy(o.numberDigits, LenCharArray(o.numberDigits)); + numberDigits = I18nNewCharString(o.numberDigits, I18nStrlen(o.numberDigits)); } return *this; } @@ -198,8 +190,7 @@ const char *LocaleInfo::GetRegion() const const char *LocaleInfo::GetId() const { - const char *rid = id; - return rid; + return id; } bool LocaleInfo::IsSuccess() @@ -209,18 +200,13 @@ bool LocaleInfo::IsSuccess() return r; } -void LocaleInfo::SetFail() -{ - isSucc = false; -} - bool LocaleInfo::ChangeLanguageCode(char *lang, const int32_t dstSize, const char *src, const int32_t srcSize) const { if (srcSize > LANGUAGE_MIN_LENGTH) { // three letter language only support fil and mai - if ((language[0] == 'f') && (language[1] == 'i') && (language[LANGUAGE_MIN_LENGTH] == 'l')) { + if (memcmp(src, "fil", 3) == 0) { // check 3 letters of src with fil lang[0] = 't'; lang[1] = 'l'; - } else if ((language[0] == 'm') && (language[1] == 'a') && (language[LANGUAGE_MIN_LENGTH] == 'i')) { + } else if (memcmp(src, "mai", 3) == 0) { // check 3 letters of src with mai lang[0] = 'm'; lang[1] = 'd'; } @@ -246,7 +232,7 @@ uint32_t LocaleInfo::GetMask() const return 0; } char lang[LANGUAGE_MAX_LENGTH]; - bool isRight = ChangeLanguageCode(lang, LANGUAGE_MAX_LENGTH, language, LenCharArray(language)); + bool isRight = ChangeLanguageCode(lang, LANGUAGE_MAX_LENGTH, language, I18nStrlen(language)); if (!isRight) { return 0; } @@ -255,7 +241,7 @@ uint32_t LocaleInfo::GetMask() const uint32_t tempLangFirst = (lang[0] - CHAR_OFF); uint32_t tempLangSecond = (lang[1] - CHAR_OFF); uint32_t mask = (tempLangFirst << LANG_FIRST_BEGIN) | (tempLangSecond << LANG_SECOND_BEGIN); - if ((script != nullptr) && (LenCharArray(script) > 0)) { + if ((script != nullptr) && (I18nStrlen(script) > 0)) { if (strcmp(script, "Hans") == 0) { mask = mask | (HANS << SCRIPT_BEGIN); } else if (strcmp(script, "Hant") == 0) { @@ -272,7 +258,7 @@ uint32_t LocaleInfo::GetMask() const mask = mask | (GURU << SCRIPT_BEGIN); } } - if ((region != nullptr) && (LenCharArray(region) > 1)) { + if ((region != nullptr) && (I18nStrlen(region) > 1)) { uint32_t tempRegion = (region[0] - CHAR_OFF); uint32_t tempRegionSecond = (region[1] - CHAR_OFF); mask = mask | (tempRegion << REGION_FIRST_LETTER) | (tempRegionSecond); @@ -395,7 +381,7 @@ void LocaleInfo::ProcessExtension(LocaleInfo &locale, const char *key, const cha } // now we only support numbering systems in extentions if (strcmp(key, "nu") == 0) { - locale.numberDigits = NewArrayAndCopy(value, strlen(value)); + locale.numberDigits = I18nNewCharString(value, strlen(value)); return; } } @@ -421,7 +407,7 @@ bool LocaleInfo::IsScript(const char *start, uint8_t length) if (length != SCRIPT_LENGTH) { return false; } - if (*start == 'H' && *(start + 1) == 'a' && *(start + 2) == 'n') { // check the first and second script characters + if (memcmp(start, "Han", 3) == 0) { // check 3 letters if (*(start + 3) == 't') { // check the last script character return true; } else if (*(start + 3) == 's') { // check the last script character @@ -429,15 +415,15 @@ bool LocaleInfo::IsScript(const char *start, uint8_t length) } else { return false; } - } else if (*start == 'Q' && *(start + 1) == 'a' && *(start + 2) == 'a' && *(start + 3) == 'g') { // check all + } else if (memcmp(start, "Qaag", 4) == 0) { // check 4 letters with Qaag return true; - } else if (*start == 'L' && *(start + 1) == 'a' && *(start + 2) == 't' && *(start + 3) == 'n') { // check all + } else if (memcmp(start, "Latn", 4) == 0) { // check 4 letters with Latn return true; - } else if (*start == 'C' && *(start + 1) == 'y' && *(start + 2) == 'r' && *(start + 3) == 'l') { // check all + } else if (memcmp(start, "Cyrl", 4) == 0) { // check 4 letters with Cyrl return true; - } else if (*start == 'D' && *(start + 1) == 'e' && *(start + 2) == 'v' && *(start + 3) == 'a') { // check all + } else if (memcmp(start, "Deva", 4) == 0) { // check 4 letters with Deva return true; - } else if (*start == 'G' && *(start + 1) == 'u' && *(start + 2) == 'r' && *(start + 3) == 'u') { // check all + } else if (memcmp(start, "Guru", 4) == 0) { // check 4 letters with Guru return true; } else { return false; @@ -454,8 +440,8 @@ bool LocaleInfo::IsRegion(const char *start, uint8_t length) if (ch < 'A' || ch > 'Z') { // region characters should all be upper case. return false; } - return true; } + return true; } const char* LocaleInfo::GetExtension(const char *key) diff --git a/frameworks/i18n/src/number_data.cpp b/frameworks/i18n/src/number_data.cpp index 4702435..77c9fa4 100755 --- a/frameworks/i18n/src/number_data.cpp +++ b/frameworks/i18n/src/number_data.cpp @@ -28,12 +28,12 @@ StyleData::StyleData(const StyleData &data) intLen = data.intLen; preZero = data.preZero; if (data.numFormat != nullptr) { - int len = LenCharArray(data.numFormat); - numFormat = NewArrayAndCopy(data.numFormat, len); + int len = I18nStrlen(data.numFormat); + numFormat = I18nNewCharString(data.numFormat, len); } if (data.entireFormat != nullptr) { - int len = LenCharArray(data.entireFormat); - entireFormat = NewArrayAndCopy(data.entireFormat, len); + int len = I18nStrlen(data.entireFormat); + entireFormat = I18nNewCharString(data.entireFormat, len); } } @@ -55,12 +55,12 @@ StyleData &StyleData::operator=(const StyleData &data) intLen = data.intLen; preZero = data.preZero; if (data.numFormat != nullptr) { - int len = LenCharArray(data.numFormat); - numFormat = NewArrayAndCopy(data.numFormat, len); + int len = I18nStrlen(data.numFormat); + numFormat = I18nNewCharString(data.numFormat, len); } if (data.entireFormat != nullptr) { - int len = LenCharArray(data.entireFormat); - entireFormat = NewArrayAndCopy(data.entireFormat, len); + int len = I18nStrlen(data.entireFormat); + entireFormat = I18nNewCharString(data.entireFormat, len); } return *this; } @@ -81,8 +81,8 @@ void NumberData::Init(const char *pat, int patLen, const char *percentPat, int p if (pat == nullptr || patLen <= 0 || percentPat == nullptr || perPatLen <= 0) { return; } - pattern = NewArrayAndCopy(pat, patLen); - percentPattern = NewArrayAndCopy(percentPat, perPatLen); + pattern = I18nNewCharString(pat, patLen); + percentPattern = I18nNewCharString(percentPat, perPatLen); percentStyle.type = PERCENT; if (pattern != nullptr) { ParsePattern(pattern, patLen, style); @@ -101,11 +101,11 @@ void NumberData::InitSign(const std::string *signs, int size) std::string groupSign = signs[1]; // use array to store num data, second is group sign std::string perSign = signs[PERCENT_SIGN_INDEX]; // use array to store num data, third is percent sign const char *td = decSign.c_str(); - decimal = NewArrayAndCopy(td, LenCharArray(td)); + decimal = I18nNewCharString(td, I18nStrlen(td)); const char *tdg = groupSign.c_str(); - group = NewArrayAndCopy(tdg, LenCharArray(tdg)); + group = I18nNewCharString(tdg, I18nStrlen(tdg)); const char *tdp = perSign.c_str(); - percent = NewArrayAndCopy(tdp, LenCharArray(tdp)); + percent = I18nNewCharString(tdp, I18nStrlen(tdp)); } void NumberData::ParsePattern(const char *pattern, const int len, StyleData &styleData) @@ -255,8 +255,8 @@ void NumberData::ParseOtherPerPattern(const char *pattern, const int len, // do nothing } } - int typeLen = LenCharArray(type.data()); - styleData.entireFormat = NewArrayAndCopy(type.data(), typeLen); + int typeLen = I18nStrlen(type.data()); + styleData.entireFormat = I18nNewCharString(type.data(), typeLen); } } @@ -293,7 +293,7 @@ NumberData::NumberData(const char *pat, const char *percentPat, std::string decS std::string nums[NUM_SIZE] = NUMBER_SIGN; SetNumSystem(nums, NUM_SIZE); std::string signs[3] = { decSign, groupSign, perSign }; // use string array contain number data - Init(pat, LenCharArray(pat), percentPat, LenCharArray(percentPat)); + Init(pat, I18nStrlen(pat), percentPat, I18nStrlen(percentPat)); InitSign(signs, SIGNS_SIZE); } } @@ -304,8 +304,8 @@ NumberData::NumberData() std::string signs[3] = { ".", ",", "%" }; // use string array contain number data const char *enNumberPattern = "#,##0.###"; const char *percentPattern = "#,##0%"; - Init(const_cast(enNumberPattern), LenCharArray(enNumberPattern), const_cast(percentPattern), - LenCharArray(percentPattern)); + Init(const_cast(enNumberPattern), I18nStrlen(enNumberPattern), const_cast(percentPattern), + I18nStrlen(percentPattern)); InitSign(signs, SIGNS_SIZE); } @@ -373,27 +373,34 @@ void NumberData::GetNumberingSystem(const char *numberingSystem, std::string &re return; } if (strcmp(numberingSystem, "arab") == 0) { - signed char digits[] = { -39, -96, 59, -39, -95, 59, -39, -94, 59, -39, -93, 59, -39, -92, 59, -39, -91, 59, - -39, -90, 59, -39, -89, 59, -39, -88, 59, -39, -87, 0 }; + signed char digits[] = { + -39, -96, 59, -39, -95, 59, -39, -94, 59, -39, -93, 59, -39, -92, 59, -39, -91, 59, -39, -90, 59, -39, -89, + 59, -39, -88, 59, -39, -87, 0 + }; ret = reinterpret_cast(digits); } else if (strcmp(numberingSystem, "arabext") == 0) { - signed char digits[] = { -37, -80, 59, -37, -79, 59, -37, -78, 59, -37, -77, 59, -37, -76, 59, -37, -75, 59, - -37, -74, 59, -37, -73, 59, -37, -72, 59, -37, -71, 0 }; + signed char digits[] = { + -37, -80, 59, -37, -79, 59, -37, -78, 59, -37, -77, 59, -37, -76, 59, -37, -75, 59, -37, -74, 59, -37, -73, + 59, -37, -72, 59, -37, -71, 0 + }; ret = reinterpret_cast(digits); } else if (strcmp(numberingSystem, "beng") == 0) { - signed char digits[] = { -32, -89, -90, 59, -32, -89, -89, 59, -32, -89, -88, 59, -32, -89, -87, 59, -32, -89, - -86, 59, -32, -89, -85, 59, -32, -89, -84, 59, -32, -89, -83, 59, -32, -89, -82, 59, - -32, -89, -81, 0 }; + signed char digits[] = { + -32, -89, -90, 59, -32, -89, -89, 59, -32, -89, -88, 59, -32, -89, -87, 59, -32, -89, -86, 59, -32, -89, + -85, 59, -32, -89, -84, 59, -32, -89, -83, 59, -32, -89, -82, 59, -32, -89, -81, 0 + }; ret = reinterpret_cast(digits); } else if (strcmp(numberingSystem, "deva") == 0) { - signed char digits[] = { -32, -91, -90, 59, -32, -91, -89, 59, -32, -91, -88, 59, -32, -91, -87, 59, -32, -91, - -86, 59, -32, -91, -85, 59, -32, -91, -84, 59, -32, -91, -83, 59, -32, -91, -82, 59, - -32, -91, -81, 0 }; + signed char digits[] = { + -32, -91, -90, 59, -32, -91, -89, 59, -32, -91, -88, 59, -32, -91, -87, 59, -32, -91, -86, 59, -32, -91, + -85, 59, -32, -91, -84, 59, -32, -91, -83, 59, -32, -91, -82, 59, -32, -91, -81, 0 + }; ret = reinterpret_cast(digits); } else if (strcmp(numberingSystem, "mymr") == 0) { - signed char digits[] = { -31, -127, -128, 59, -31, -127, -127, 59, -31, -127, -126, 59, -31, -127, -125, 59, - -31, -127, -124, 59, -31, -127, -123, 59, -31, -127, -122, 59, -31, -127, -121, 59, - -31, -127, -120, 59, -31, -127, -119, 0 }; + signed char digits[] = { + -31, -127, -128, 59, -31, -127, -127, 59, -31, -127, -126, 59, -31, -127, -125, 59, -31, -127, -124, 59, + -31, -127, -123, 59, -31, -127, -122, 59, -31, -127, -121, 59, -31, -127, -120, 59, -31, -127, -119, 0 + }; ret = reinterpret_cast(digits); } else { ret = "0;1;2;3;4;5;6;7;8;9"; diff --git a/frameworks/i18n/src/number_format_impl.cpp b/frameworks/i18n/src/number_format_impl.cpp index b38c7f9..a71a05c 100755 --- a/frameworks/i18n/src/number_format_impl.cpp +++ b/frameworks/i18n/src/number_format_impl.cpp @@ -67,7 +67,7 @@ bool NumberFormatImpl::Init(const DataResource &resource) { std::string unprocessedNumberFormat(resource.GetString(DataResourceType::NUMBER_FORMAT)); std::string split[NUM_PATTERN_SIZE]; - Split(unprocessedNumberFormat, split, NUM_PATTERN_SIZE, NUM_PATTERN_SEP); + I18nSplitString(unprocessedNumberFormat, split, NUM_PATTERN_SIZE, NUM_PATTERN_SEP); std::string decSign = split[NUM_DEC_SIGN_INDEX]; std::string groupSign = split[NUM_GROUP_SIGN_INDEX]; std::string perSign = split[NUM_PERCENT_SIGN_INDEX]; @@ -95,7 +95,7 @@ bool NumberFormatImpl::Init(const DataResource &resource) } if (unprocessedNumberDigit != "") { std::string splitDigit[NUM_DIGIT_SIZE]; - Split(unprocessedNumberDigit, splitDigit, NUM_DIGIT_SIZE, NUM_DIGIT_SEP); + I18nSplitString(unprocessedNumberDigit, splitDigit, NUM_DIGIT_SIZE, NUM_DIGIT_SEP); defaultData->SetNumSystem(splitDigit, NUM_DIGIT_SIZE); } return true; @@ -124,7 +124,7 @@ std::string NumberFormatImpl::InnerFormat(double num, StyleData &style, bool has char *content = buff; char *decimalNum = strchr(content, NumberData::NUMBER_DECIMAL); - int decLen = (decimalNum == nullptr) ? 0 : LenCharArray(decimalNum); + int decLen = (decimalNum == nullptr) ? 0 : I18nStrlen(decimalNum); int lastLen = isShowGroup ? (len + CountGroupNum(len, decLen, style.isTwoGroup)) : len; char *result = reinterpret_cast(I18nMalloc(lastLen + 1)); if (result == nullptr) { @@ -400,7 +400,7 @@ bool NumberFormatImpl::SetMinDecimalLength(int length) char *NumberFormatImpl::FillMinDecimal(const char *target, int len, int addSize, bool isDec) const { - char *content = NewArrayAndCopy(target, len + addSize); + char *content = I18nNewCharString(target, len + addSize); if (content == nullptr) { return nullptr; } diff --git a/frameworks/i18n/src/plural_format_impl.cpp b/frameworks/i18n/src/plural_format_impl.cpp index 62535d8..d68c500 100755 --- a/frameworks/i18n/src/plural_format_impl.cpp +++ b/frameworks/i18n/src/plural_format_impl.cpp @@ -55,7 +55,7 @@ bool PluralFormatImpl::Init(const DataResource &resource) PluralRules *PluralFormatImpl::InitPluralRules(std::string unprocessedPluralData) { std::string rules[RULES_NUM]; - Split(unprocessedPluralData, rules, RULES_NUM, PLURAL_SEP); + I18nSplitString(unprocessedPluralData, rules, RULES_NUM, PLURAL_SEP); int zeroRuleSize = rules[PluralRuleType::ZERO].size(); int oneRuleSize = rules[PluralRuleType::ONE].size(); int twoRuleSize = rules[PluralRuleType::TWO].size(); diff --git a/frameworks/i18n/src/str_util.cpp b/frameworks/i18n/src/str_util.cpp index 2c76f83..5be2a7a 100755 --- a/frameworks/i18n/src/str_util.cpp +++ b/frameworks/i18n/src/str_util.cpp @@ -18,6 +18,8 @@ #include "securec.h" #include "types.h" +#define I18N_STRING_LENGTH_MAX 512 + namespace OHOS { namespace I18N { int ReplaceAndCountOff(std::string &content, const int index, const char *sign, const int off) @@ -27,8 +29,7 @@ int ReplaceAndCountOff(std::string &content, const int index, const char *sign, return off; } content = content.replace(index, 1, sign); - int newOff = off + signLen - 1; - return newOff; + return off + signLen - 1; } void ArrayCopy(std::string *target, const int targetSize, const std::string *source, const int sourceSize) @@ -41,24 +42,6 @@ void ArrayCopy(std::string *target, const int targetSize, const std::string *sou } } -char *NewArrayAndCopy(const char *source, const int len) -{ - if ((source == nullptr) || (len <= 0)) { - return nullptr; - } - char *out = reinterpret_cast(I18nMalloc(len + 1)); - if (out == nullptr) { - return nullptr; - } - errno_t rc = strcpy_s(out, len + 1, source); - if (rc != EOK) { - I18nFree(out); - return nullptr; - } - out[len] = '\0'; - return out; -} - char *I18nNewCharString(const char *source, const int len) { if ((source == nullptr) || (len <= 0)) { @@ -68,12 +51,7 @@ char *I18nNewCharString(const char *source, const int len) if (out == nullptr) { return nullptr; } - errno_t rc = memcpy_s(out, len + 1, source, len); - if (rc != EOK) { - I18nFree(out); - return nullptr; - } - out[len] = '\0'; + (void) strncpy_s(out, len + 1, source, len); // it's safe to ignore return value when destMax > count return out; } @@ -86,7 +64,7 @@ bool CleanCharArray(char *target, const int len) return true; } -int LenCharArray(const char *target) +int I18nStrlen(const char *target) { if (target == nullptr) { return 0; @@ -94,7 +72,7 @@ int LenCharArray(const char *target) return strlen(target); } -void Split(const std::string &src, std::string *dst, const int32_t size, const char &sep) +void I18nSplitString(const std::string &src, std::string * const dst, const int32_t size, const char &sep) { if (dst == nullptr || size <= 0) { return; @@ -103,36 +81,32 @@ void Split(const std::string &src, std::string *dst, const int32_t size, const c std::string::size_type begin = 0; std::string::size_type end = 0; - while (end < src.size()) { - if (src[end] != sep) { - ++end; - } else { - dst[current] = std::string(src, begin, end - begin); + std::string::size_type srcSize = src.size(); + while (current < size) { + while ((end < srcSize) && (src[end] != sep)) { ++end; - begin = end; - ++current; - if (current >= size) { - return; - } } + if (end >= srcSize) { + break; + } + dst[current++] = std::string(src, begin, end - begin); + ++end; // pass the sep + begin = end; } - if ((begin != end) && (current < size)) { - dst[current] = std::string(src, begin, end - begin); + if (current < size && end > begin) { + dst[current++] = std::string(src, begin, end - begin); } } bool CompareLocaleItem(const char *item, const char* other) { - if (item == nullptr) { - if (other != nullptr) { - return false; - } - } else { - if (other == nullptr || strcmp(item, other) != 0) { - return false; - } + if ((item == nullptr) && (other == nullptr)) { + return true; } - return true; + if ((item != nullptr) && (other != nullptr) && (strcmp(item, other) == 0)) { + return true; + } + return false; } /** @@ -159,18 +133,16 @@ std::string Parse(const char *str, int32_t count) return ""; } int last = ind; - --ind; while (last < length) { if (str[last] == '_') { break; } ++last; } - if (last - ind - 1 <= 0) { + if (last - ind <= 0) { return ""; } - std::string temp(str); - return temp.substr(ind + 1, last - ind - 1); + return std::string(str + ind, last - ind); } } // I18N } // OHOS diff --git a/interfaces/kits/i18n/include/locale_info.h b/interfaces/kits/i18n/include/locale_info.h index b284976..a767c6e 100755 --- a/interfaces/kits/i18n/include/locale_info.h +++ b/interfaces/kits/i18n/include/locale_info.h @@ -200,6 +200,7 @@ private: static bool IsScript(const char *start, uint8_t length); static bool IsRegion(const char *start, uint8_t length); void InitIdstr(); + void FreeResources(); char *language = nullptr; char *script = nullptr; char *region = nullptr; @@ -207,7 +208,6 @@ private: char *numberDigits = nullptr; bool isSucc = true; bool IsSuccess(); - void SetFail(); void Init(const char *lang, const char *script, const char *region, int &status); const int CHAR_OFF = 48; }; -- Gitee