From: Hokwon Song Date: Wed, 21 Aug 2013 10:04:01 +0000 (+0900) Subject: Refactory NumberSymbols. X-Git-Tag: submit/tizen/20131210.080830^2^2~158^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3d32c75fc2d4944c77efab050e7c5420cf8ec79b;hp=48e3c4359eaffb3d7601fa1968ef9ea6dc98a92b;p=platform%2Fframework%2Fnative%2Fappfw.git Refactory NumberSymbols. Change-Id: I9e0c4ccc77b9fa75ebcede91b5efc2732d65740e Signed-off-by: Hokwon Song --- diff --git a/src/locales/FLclNumberSymbols.cpp b/src/locales/FLclNumberSymbols.cpp index 9c09925..02fd499 100644 --- a/src/locales/FLclNumberSymbols.cpp +++ b/src/locales/FLclNumberSymbols.cpp @@ -34,10 +34,6 @@ using namespace Tizen::Base; namespace Tizen { namespace Locales { - -///////////////////////////////////////////////////////////////////////////////////////////////////// -// Public Method - NumberSymbols::NumberSymbols(void) : __pNumberSymbolsImpl(null) { @@ -52,7 +48,6 @@ NumberSymbols::~NumberSymbols(void) result NumberSymbols::Construct(const Locale& locale) { - // Object is not allowed to construct twice SysAssertf(__pNumberSymbolsImpl == null, "Already constructed! Calling Construct() twice or more on a same instance is not allowed for this class"); @@ -62,7 +57,6 @@ NumberSymbols::Construct(const Locale& locale) { r = E_UNSUPPORTED_OPERATION; } - // validating locale SysTryReturnResult(NID_LCL, _LocaleImpl::IsSupported(locale), r, "Given locale is not supported"); __pNumberSymbolsImpl = new (std::nothrow) _NumberSymbolsImpl; diff --git a/src/locales/FLcl_LocaleData.cpp b/src/locales/FLcl_LocaleData.cpp index 03643b8..809d3a1 100644 --- a/src/locales/FLcl_LocaleData.cpp +++ b/src/locales/FLcl_LocaleData.cpp @@ -237,34 +237,6 @@ _LocaleData::SetLocale(const Locale& ospLocale) return (Tizen::App::_AppInfo::GetApiVersion() == _API_VERSION_2_0 && Tizen::App::_AppInfo::IsOspCompat()) ? E_UNSUPPORTED_OPERATION : E_INVALID_ARG; } -result -_LocaleData::GetNumberSymbols(const Locale& locale, String symbols[]) -{ - UErrorCode status = U_ZERO_ERROR; - ; - SetLocale(locale); - - SysTryReturnResult(NID_LCL, IsLocaleSupported(), E_SYSTEM, "A System error has been occurred. Locale is not supported"); - - IcuDecimalFormatSymbols sym(__icuLocale, status); - SysTryReturnResult(NID_LCL, U_SUCCESS(status), E_SYSTEM, "A System error has been occurred. Unable to get ICU Decimal Format Symbols"); - - symbols[NUMBER_SYMBOL_DECIMAL_SEPARATOR] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kDecimalSeparatorSymbol)); - symbols[NUMBER_SYMBOL_GROUPING_SEPARATOR] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kGroupingSeparatorSymbol)); - symbols[NUMBER_SYMBOL_PATTERN_SEPARATOR] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kPatternSeparatorSymbol)); - symbols[NUMBER_SYMBOL_PERCENT] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kPercentSymbol)); - symbols[NUMBER_SYMBOL_ZERO_DIGIT] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kZeroDigitSymbol)); - symbols[NUMBER_SYMBOL_DIGIT] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kDigitSymbol)); - symbols[NUMBER_SYMBOL_CURRENCY] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kCurrencySymbol)); - symbols[NUMBER_SYMBOL_INTL_CURRENCY] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kIntlCurrencySymbol)); - symbols[NUMBER_SYMBOL_MONETARY_SEPARATOR] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kMonetarySeparatorSymbol)); - symbols[NUMBER_SYMBOL_PER_MILL] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kPerMillSymbol)); - symbols[NUMBER_SYMBOL_EXPONENTIAL] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kExponentialSymbol)); - symbols[NUMBER_SYMBOL_PLUS_SIGN] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kPlusSignSymbol)); - symbols[NUMBER_SYMBOL_MINUS_SIGN] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kMinusSignSymbol)); - - return E_SUCCESS; -} result _LocaleData::SetNumberFormatter(const Locale& locale, NumberFormatterStyle style) diff --git a/src/locales/FLcl_LocaleData.h b/src/locales/FLcl_LocaleData.h index eada8f8..b885448 100644 --- a/src/locales/FLcl_LocaleData.h +++ b/src/locales/FLcl_LocaleData.h @@ -103,9 +103,6 @@ public: bool IsLocaleSupported(); result SetLocale(const Locale& ospLocale); - // Methods to support NumberSymbols - result GetNumberSymbols(const Locale &locale, Tizen::Base::String symbols[]); - // Methods to support NumberFormatter result SetNumberFormatter(const Locale& locale, NumberFormatterStyle style); result FormatNumber(long number, _FieldPosition& pos, Tizen::Base::String& str); diff --git a/src/locales/FLcl_NumberSymbolsImpl.cpp b/src/locales/FLcl_NumberSymbolsImpl.cpp index 4f3eb6c..ed1c5b4 100644 --- a/src/locales/FLcl_NumberSymbolsImpl.cpp +++ b/src/locales/FLcl_NumberSymbolsImpl.cpp @@ -18,37 +18,47 @@ * @file FLclNumberSymbols.cpp * @brief This is the implementation file for NumberSymbols class. */ - +#include #include #include #include "FLcl_NumberSymbolsImpl.h" #include "FLcl_LocaleData.h" - using namespace Tizen::Base; namespace Tizen { namespace Locales { - -///////////////////////////////////////////////////////////////////////////////////////////////////// -// Public Method +static U_ICU_NAMESPACE::DecimalFormatSymbols::ENumberFormatSymbol NUMBER_SYMBOL_TYPE_CONVERT_TABLE[NUMBER_SYMBOL_COUNT] = + { U_ICU_NAMESPACE::DecimalFormatSymbols::kDecimalSeparatorSymbol + , U_ICU_NAMESPACE::DecimalFormatSymbols::kGroupingSeparatorSymbol + , U_ICU_NAMESPACE::DecimalFormatSymbols::kPatternSeparatorSymbol + , U_ICU_NAMESPACE::DecimalFormatSymbols::kPercentSymbol + , U_ICU_NAMESPACE::DecimalFormatSymbols::kZeroDigitSymbol + , U_ICU_NAMESPACE::DecimalFormatSymbols::kDigitSymbol + , U_ICU_NAMESPACE::DecimalFormatSymbols::kCurrencySymbol + , U_ICU_NAMESPACE::DecimalFormatSymbols::kIntlCurrencySymbol + , U_ICU_NAMESPACE::DecimalFormatSymbols::kMonetarySeparatorSymbol + , U_ICU_NAMESPACE::DecimalFormatSymbols::kPerMillSymbol + , U_ICU_NAMESPACE::DecimalFormatSymbols::kExponentialSymbol + , U_ICU_NAMESPACE::DecimalFormatSymbols::kPlusSignSymbol + , U_ICU_NAMESPACE::DecimalFormatSymbols::kMinusSignSymbol + }; _NumberSymbolsImpl::_NumberSymbolsImpl(void) : __locale(LANGUAGE_INVALID, COUNTRY_INVALID) + , __pIcuDecimalFormatSymbols(null) { } _NumberSymbolsImpl::_NumberSymbolsImpl(const _NumberSymbolsImpl& other) : __locale(LANGUAGE_INVALID, COUNTRY_INVALID) + , __pIcuDecimalFormatSymbols(null) { - this->__locale = other.__locale; - - for (int i = 0; i < NUMBER_SYMBOL_COUNT; i++) - { - this->__symbols[i] = other.__symbols[i]; // Copying symbols - } + __locale = other.__locale; + __pIcuDecimalFormatSymbols = new U_ICU_NAMESPACE::DecimalFormatSymbols(*other.__pIcuDecimalFormatSymbols); + SysTryReturn(NID_LCL, __pIcuDecimalFormatSymbols, , E_OUT_OF_MEMORY, "It is not enough memory."); } @@ -57,12 +67,13 @@ _NumberSymbolsImpl::operator =(const _NumberSymbolsImpl& rhs) { if (this != &rhs) { - for (int i = 0; i < (int) NUMBER_SYMBOL_COUNT; ++i) + __locale = rhs.__locale; + if (__pIcuDecimalFormatSymbols) { - __symbols[(NumberSymbol) i] = rhs.__symbols[(NumberSymbol) i]; // Copying symbols + delete __pIcuDecimalFormatSymbols; + __pIcuDecimalFormatSymbols = null; } - - __locale = rhs.__locale; + __pIcuDecimalFormatSymbols = new U_ICU_NAMESPACE::DecimalFormatSymbols(*rhs.__pIcuDecimalFormatSymbols); } return *this; @@ -71,40 +82,45 @@ _NumberSymbolsImpl::operator =(const _NumberSymbolsImpl& rhs) _NumberSymbolsImpl::~_NumberSymbolsImpl(void) { + if (__pIcuDecimalFormatSymbols) + { + delete __pIcuDecimalFormatSymbols; + } } result _NumberSymbolsImpl::Construct(const Locale& locale) { - result r = E_SUCCESS; - _LocaleData localeData; - r = localeData.GetNumberSymbols(locale, __symbols); // Get number symbols from ICU + result r = (Tizen::App::_AppInfo::GetApiVersion() == _API_VERSION_2_0 && Tizen::App::_AppInfo::IsOspCompat()) + ? E_UNSUPPORTED_OPERATION + : E_INVALID_ARG; - if (!IsFailed(r)) - { - __locale = locale; - return E_SUCCESS; - } + U_ICU_NAMESPACE::Locale icuLocale = _LocaleData::GetIcuLocale(locale); + SysTryReturnResult(NID_LCL, icuLocale.isBogus() != true, r, "It is an invalid locale."); + + UErrorCode status = U_ZERO_ERROR; + __pIcuDecimalFormatSymbols = new U_ICU_NAMESPACE::DecimalFormatSymbols(icuLocale, status); + SysTryReturnResult(NID_LCL, __pIcuDecimalFormatSymbols, E_OUT_OF_MEMORY, "It is not enough memory."); + __locale = locale; - return (Tizen::App::_AppInfo::GetApiVersion() == _API_VERSION_2_0 && Tizen::App::_AppInfo::IsOspCompat()) ? E_UNSUPPORTED_OPERATION : E_INVALID_ARG; + return E_SUCCESS; } String _NumberSymbolsImpl::GetNumberSymbol(NumberSymbol symbol) const { - return (symbol < NUMBER_SYMBOL_COUNT) ? __symbols[symbol] : String(); // Get symbol value for symbol + SysTryReturn(NID_LCL, symbol < NUMBER_SYMBOL_COUNT, String(), E_INVALID_ARG, "It is an invalid argument."); + return _LocaleData::GetOspString(__pIcuDecimalFormatSymbols->getSymbol(NUMBER_SYMBOL_TYPE_CONVERT_TABLE[symbol])); } result _NumberSymbolsImpl::SetNumberSymbol(const NumberSymbol symbol, const String& str) { - if (symbol < NUMBER_SYMBOL_COUNT) // validate symbol value - { - __symbols[symbol] = str; // Set symbol - } - + SysTryReturnResult(NID_LCL, symbol < NUMBER_SYMBOL_COUNT, E_INVALID_ARG, "It is an invalid argument."); + U_ICU_NAMESPACE::UnicodeString icuStr = _LocaleData::GetIcuString(str); + __pIcuDecimalFormatSymbols->setSymbol(NUMBER_SYMBOL_TYPE_CONVERT_TABLE[symbol], icuStr); return E_SUCCESS; } @@ -113,7 +129,7 @@ const Locale* _NumberSymbolsImpl::GetLocale(void) const { ClearLastResult(); - return &__locale; // return locale object stored during construction + return &__locale; } diff --git a/src/locales/FLcl_NumberSymbolsImpl.h b/src/locales/FLcl_NumberSymbolsImpl.h index a95a81f..02232e9 100644 --- a/src/locales/FLcl_NumberSymbolsImpl.h +++ b/src/locales/FLcl_NumberSymbolsImpl.h @@ -25,7 +25,7 @@ #define _FLCL_INTERNAL_NUMBER_SYMBOLS_IMPL_H_ // Includes -#include +#include #include @@ -35,7 +35,6 @@ namespace Tizen { namespace Locales class _NumberSymbolsImpl : public Tizen::Base::Object { -// Construct Operations public: _NumberSymbolsImpl(void); virtual ~_NumberSymbolsImpl(void); @@ -43,19 +42,15 @@ public: _NumberSymbolsImpl(const _NumberSymbolsImpl& other); _NumberSymbolsImpl& operator =(const _NumberSymbolsImpl& other); - -// Operations public: result Construct(const Locale& locale); Tizen::Base::String GetNumberSymbol(NumberSymbol symbol) const; result SetNumberSymbol(NumberSymbol symbol, const Tizen::Base::String& str); const Locale* GetLocale(void) const; - -// Attribute private: Locale __locale; - Tizen::Base::String __symbols[NUMBER_SYMBOL_COUNT]; + U_ICU_NAMESPACE::DecimalFormatSymbols* __pIcuDecimalFormatSymbols; }; // _NumberSymbolsImpl