5 #ifndef __FAST_ATOF_H_INCLUDED__ 6 #define __FAST_ATOF_H_INCLUDED__ 59 u32 unsignedValue = 0;
60 while ( ( *in >=
'0') && ( *in <=
'9' ))
62 const u32 tmp = ( unsignedValue * 10 ) + ( *in -
'0' );
63 if (tmp<unsignedValue)
65 unsignedValue=(
u32)0xffffffff;
98 const bool negative = (
'-' == *in);
99 if (negative || (
'+' == *in))
103 if (unsignedValue > (
u32)INT_MAX)
113 return -((
s32)unsignedValue);
115 return (
s32)unsignedValue;
127 if (in >=
'0' && in <=
'9')
129 else if (in >=
'a' && in <=
'f')
130 return 10u + in -
'a';
131 else if (in >=
'A' && in <=
'F')
132 return 10u + in -
'A';
156 u32 unsignedValue = 0;
160 if ((*in >=
'0') && (*in <=
'9'))
161 tmp = (unsignedValue << 4u) + (*in -
'0');
162 else if ((*in >=
'A') && (*in <=
'F'))
163 tmp = (unsignedValue << 4u) + (*in -
'A') + 10;
164 else if ((*in >=
'a') && (*in <=
'f'))
165 tmp = (unsignedValue << 4u) + (*in -
'a') + 10;
168 if (tmp<unsignedValue)
170 unsignedValue=(
u32)INT_MAX;
181 return unsignedValue;
203 u32 unsignedValue = 0;
207 if ((*in >=
'0') && (*in <=
'7'))
208 tmp = (unsignedValue << 3u) + (*in -
'0');
211 if (tmp<unsignedValue)
213 unsignedValue=(
u32)INT_MAX;
224 return unsignedValue;
267 const u32 MAX_SAFE_U32_VALUE = UINT_MAX / 10 - 10;
272 while ( ( *in >=
'0') && ( *in <=
'9' ) )
276 if (intValue >= MAX_SAFE_U32_VALUE)
279 intValue = (intValue * 10) + (*in -
'0');
283 f32 floatValue = (
f32)intValue;
287 while ( ( *in >=
'0') && ( *in <=
'9' ) )
289 floatValue = (floatValue * 10.f) + (
f32)(*in -
'0');
317 const bool negative = (
'-' == *in);
318 if (negative || (
'+'==*in))
323 if ( LOCALE_DECIMAL_POINTS.findFirst(*in) >= 0 )
325 const char* afterDecimal = ++in;
327 value += decimal * fast_atof_table[afterDecimal - in];
331 if (
'e' == *in ||
'E' == *in)
340 result = negative?-value:value;
350 inline float fast_atof(
const char* floatAsString,
const char** out=0)
float fast_atof(const char *floatAsString, const char **out=0)
Convert a string to a floating point number.
const char * fast_atof_move(const char *in, f32 &result)
Provides a fast function for converting a string into a float.
float f32
32 bit floating point variable.
#define IRRLICHT_API
Set FPU settings.
Everything in the Irrlicht Engine can be found in this namespace.
u32 strtoul10(const char *in, const char **out=0)
Convert a simple string of base 10 digits into an unsigned 32 bit integer.
signed int s32
32 bit signed variable.
u32 strtoul_prefix(const char *in, const char **out=0)
Convert a C-style prefixed string (hex, oct, integer) into an unsigned 32 bit integer.
unsigned int u32
32 bit unsigned variable.
u32 strtoul8(const char *in, const char **out=0)
Convert a simple string of base 8 digits into an unsigned 32 bit integer.
f32 strtof10(const char *in, const char **out=0)
Converts a sequence of digits into a whole positive floating point value.
const float fast_atof_table[17]
u32 strtoul16(const char *in, const char **out=0)
Convert a simple string of base 16 digits into an unsigned 32 bit integer.
u32 ctoul16(char in)
Convert a hex-encoded character to an unsigned integer.
s32 strtol10(const char *in, const char **out=0)
Convert a simple string of base 10 digits into a signed 32 bit integer.
IRRLICHT_API irr::core::stringc LOCALE_DECIMAL_POINTS
Selection of characters which count as decimal point in fast_atof.