diff options
author | Andi Gutmans <andi@php.net> | 2000-05-28 18:59:40 +0000 |
---|---|---|
committer | Andi Gutmans <andi@php.net> | 2000-05-28 18:59:40 +0000 |
commit | 015884dda5e0dd37a577e00aef7c395419af5626 (patch) | |
tree | abd094220b2bbc4a3da0686d7c4d98e68d8d0856 /Zend/zend_operators.c | |
parent | 0ebb7335c9a8fa00e22dffb80be99bf208c82b9a (diff) | |
download | php-git-015884dda5e0dd37a577e00aef7c395419af5626.tar.gz |
- Use pointer arithmetic to speed up the function a bit
Diffstat (limited to 'Zend/zend_operators.c')
-rw-r--r-- | Zend/zend_operators.c | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index a058083ef8..2c0b36bbed 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -51,42 +51,45 @@ ZEND_API double zend_string_to_double(const char *number, zend_uint length) { - zend_uint i=0; double divisor = 10.0; double result = 0.0; double exponent; + const char *end = number+length; + const char *digit = number; if (!length) { return result; } - for (i=0; i<length; i++) { - if ((number[i] <= '9' && number[i] >= '0')) { + while (digit < end) { + if ((*digit <= '9' && *digit >= '0')) { result *= 10; - result += number[i] - '0'; - } else if (number[i] == '.') { - i++; + result += *digit - '0'; + } else if (*digit == '.') { + digit++; break; - } else if (toupper(number[i]) == 'E') { - exponent = (double) atoi(&number[i+1]); + } else if (toupper(*digit) == 'E') { + exponent = (double) atoi(digit+1); result *= pow(10.0, exponent); return result; } else { return result; } + digit++; } - for (; i<length; i++) { - if ((number[i] <= '9' && number[i] >= '0')) { - result += (number[i] - '0') / divisor; + while (digit < end) { + if ((*digit <= '9' && *digit >= '0')) { + result += (*digit - '0') / divisor; divisor *= 10; - } else if (toupper(number[i]) == 'E') { - exponent = (double) atoi(&number[i+1]); + } else if (toupper(*digit) == 'E') { + exponent = (double) atoi(digit+1); result *= pow(10.0, exponent); return result; } else { return result; } + digit++; } return result; } |