//
-// Open Service Platform
// Copyright (c) 2012 Samsung Electronics Co., Ltd.
//
// Licensed under the Apache License, Version 2.0 (the License);
/**
* @file FBaseFloat.cpp
* @brief This is the implementation file for Float class.
- * @see Number class
+ * @see Number class
*/
-
-// Includes
#include <cfloat>
#include <math.h>
#include <stdio.h>
#include <FBaseFloat.h>
#include <FBaseResult.h>
#include <FBaseSysLog.h>
+#include "FBase_LocalizedNumParser.h"
namespace Tizen { namespace Base
{
bool
Float::Equals(const Object& obj) const
{
- const Float* pOther = dynamic_cast <const Float*>(&obj);
+ const Float* pOther = dynamic_cast< const Float* >(&obj);
if (pOther == null)
{
int
Float::GetHashCode(void) const
{
- float* pTemp = const_cast<float*> (&value);
- int* pValue = reinterpret_cast<int*> (pTemp);
+ float* pTemp = const_cast< float* >(&value);
+ int* pValue = reinterpret_cast< int* >(pTemp);
return *pValue;
}
int
Float::GetHashCode(float val)
{
- int* pValue = reinterpret_cast<int*> (&val);
+ int* pValue = reinterpret_cast< int* >(&val);
return *pValue;
}
result
Float::Parse(const String& s, float& ret)
{
- SysTryReturn(NID_BASE, s.GetLength() >= 1, E_NUM_FORMAT, E_NUM_FORMAT,
- "[%s] The length of s MUST be greater than 0.", GetErrorMessage(E_NUM_FORMAT));
+ double tmpRet = _LocalizedNumParser::ToFloat(s, "");
- errno = 0;
- wchar_t* pEnd = null;
- float tmpRet = wcstof(s.GetPointer(), &pEnd);
- SysTryReturn(NID_BASE, (!Float::Compare(pEnd[0], 0)), E_NUM_FORMAT, E_NUM_FORMAT,
- "[%s] Float parse failed. Scan stopped at (%ls).", GetErrorMessage(E_NUM_FORMAT), pEnd);
- SysTryReturn(NID_BASE, !((!Float::Compare(tmpRet, HUGE_VAL) || !Float::Compare(tmpRet, -HUGE_VAL)) && (errno != 0)),
- E_NUM_FORMAT, E_NUM_FORMAT, "[%s] Parsed value cannot fit into a Float.", GetErrorMessage(E_NUM_FORMAT));
+ if (IsNaN(tmpRet))
+ {
+ result r = GetLastResult();
+ SysLogException(NID_BASE, r, "[%s] Propagating.", GetErrorMessage(r));
+ return r;
+ }
ret = tmpRet;
return E_SUCCESS;
char
Float::ToChar(void) const
{
- return static_cast<char> (value);
+ return static_cast< char >(value);
}
short
Float::ToShort(void) const
{
- return static_cast<short> (value);
+ return static_cast< short >(value);
}
int
Float::ToInt(void) const
{
- return static_cast<int> (value);
+ return static_cast< int >(value);
}
long
Float::ToLong(void) const
{
- return static_cast<long> (value);
+ return static_cast< long >(value);
}
long long
Float::ToLongLong(void) const
{
- return static_cast<long long> (value);
+ return static_cast< long long >(value);
}
float
double
Float::ToDouble(void) const
{
- return static_cast<double> (value);
+ return static_cast< double >(value);
}
String
Float::ToString(void) const
{
- return(Float::ToString(value));
+ return Float::ToString(value);
}
String
-Float::ToString(float value)
+Float::ToString(int precision) const
{
- const static unsigned int MAX_DIG = 7 + 3;
- const static unsigned int FLOAT_LENGTH_MAX = __DBL_MAX_10_EXP + MAX_DIG;
+//Dummy implementation to resolve build break
+ return String(L"");
+}
- if (Float::IsNaN(value))
- {
- return String(L"NaN");
- }
- else if (Float::IsInfinity(value))
- {
- return String(L"Infinity");
- }
- else
- {
- wchar_t sValue[FLOAT_LENGTH_MAX + 1] = {0, };
- swprintf(sValue, (sizeof(sValue) / sizeof(sValue[0])), L"%g", value);
+String
+Float::ToString(float value)
+{
+ return _LocalizedNumParser::ToString(value, "");
+}
- return String(sValue);
- }
+String
+Float::ToString(float value, int precision)
+{
+//Dummy implementation to resolve build break
+ return String(L"");
}
+
int
Float::ToBits(float value)
{
bool
Float::IsFinite(float value)
{
- return((isfinite(value) != 0) ? true : false);
+ return isfinite(value);
}
bool
Float::IsInfinity(void) const
{
- return(Float::IsInfinity(value));
+ return Float::IsInfinity(value);
}
bool
Float::IsInfinity(float value)
{
- return(!Float::IsFinite(value));
+ return !Float::IsFinite(value);
}
bool
Float::IsNaN(void) const
{
- return(Float::IsNaN(value));
+ return Float::IsNaN(value);
}
bool
Float::IsNaN(float value)
{
- return((isnan(value) != 0) ? true : false);
+ return isnan(value);
}
float