예제 #1
0
double
_wcstod_r (struct _reent *ptr,
	const wchar_t *nptr,
	wchar_t **endptr)
{
  return _wcstod_l (ptr, nptr, endptr, __get_current_locale ());
}
예제 #2
0
float
_wcstof_r (struct _reent *ptr,
	const wchar_t *nptr,
	wchar_t **endptr)
{
  double retval = _wcstod_l (ptr, nptr, endptr, __get_current_locale ());
  if (isnan (retval))
    return nanf (NULL);
  return (float)retval;
}
예제 #3
0
extern "C" long double _CRTIMP __cdecl _wcstold_l (
    const wchar_t *nptr,
    wchar_t **endptr,
    _locale_t plocinfo
    )
{
    // delegate to wcstod since double and long double are
    // both represented by 64 bits in this implementation
    return _wcstod_l(nptr, endptr, plocinfo);
}
예제 #4
0
 typename std::enable_if<std::is_same<CharT,wchar_t>::value,double>::type
 operator()(const CharT* s, size_t) const
 {
     CharT *end = nullptr;
     double val = _wcstod_l(s, &end, locale_);
     if (s == end)
     {
         JSONCONS_THROW(json_runtime_error<std::invalid_argument>("Convert string to double failed"));
     }
     return val;
 }
예제 #5
0
inline
double string_to_float(const std::wstring& s)
{
    static _locale_t locale = _create_locale(LC_NUMERIC, "C");

    const wchar_t* begin = &s[0];
    wchar_t* end = const_cast<wchar_t*>(begin)+s.size();
    double val = _wcstod_l(begin,&end,locale);
    if (begin == end)
    {
        throw std::invalid_argument("Invalid float value");
    }
    return val;
}