//
-// Open Service Platform
// Copyright (c) 2012 Samsung Electronics Co., Ltd.
//
// Licensed under the Apache License, Version 2.0 (the License);
*/
#include <unique_ptr.h>
#include <unicode/decimfmt.h>
-#include <locale.h>
#include <FBaseSysLog.h>
#include <FLclNumberFormatter.h>
UErrorCode ec = U_ZERO_ERROR;
std::unique_ptr<IcuNumberFormat> pIcuNumberFormatter(IcuNumberFormat::createInstance(icuLocale, icuStyle, ec));
- if (pIcuNumberFormatter)
- {
- IcuDecimalFormat* pDecimalFmt = dynamic_cast<IcuDecimalFormat*>(pIcuNumberFormatter.get());
- if (pDecimalFmt)
- {
- pIcuNumberFormatter.release();
- pNumberFormatterImpl->__pIcuNumberFormatter = pDecimalFmt;
- pNumberFormatterImpl->__currency.Construct(locale);
- pNewFormatter->__pNumberFormatterImpl = pNumberFormatterImpl.release();
+ SysTryReturn(NID_LCL, pIcuNumberFormatter, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed");
- SetLastResult(E_SUCCESS);
- return pNewFormatter.release();
- }
- }
+ IcuDecimalFormat* pDecimalFmt = dynamic_cast<IcuDecimalFormat*>(pIcuNumberFormatter.get());
+ SysTryReturn(NID_LCL, pDecimalFmt, null, E_SYSTEM, "It is failed to get fomatter.");
+
+ pIcuNumberFormatter.release();
+ pNumberFormatterImpl->__pIcuNumberFormatter = pDecimalFmt;
+ pNumberFormatterImpl->__currency.Construct(locale);
+ pNewFormatter->__pNumberFormatterImpl = pNumberFormatterImpl.release();
- SetLastResult(E_INVALID_ARG);
- return null;
+ SetLastResult(E_SUCCESS);
+ return pNewFormatter.release();
}
result
result
_NumberFormatterImpl::Format(double number, String& str, _FieldPosition pos) const
{
- /*TODO: ICU 4.8 did not replace "," by a locale. So, it returns NaN even if a number is not NaN.
- We are setting and restoring a system locale to "C".
- It should be removed if ICU version is up.*/
- setlocale(LC_ALL, "C");
IcuUnicodeString icuStr;
IcuFieldPosition icuPos = _LocaleData::GetIcuFieldPosition(pos);
icuStr = __pIcuNumberFormatter->format(number, icuStr, icuPos);
- setlocale(LC_ALL, "");
str = _LocaleData::GetOspString(icuStr);
return E_SUCCESS;
}