summaryrefslogtreecommitdiff
path: root/Zend/zend_operators.c
diff options
context:
space:
mode:
authorAndi Gutmans <andi@php.net>2000-05-28 18:59:40 +0000
committerAndi Gutmans <andi@php.net>2000-05-28 18:59:40 +0000
commit015884dda5e0dd37a577e00aef7c395419af5626 (patch)
treeabd094220b2bbc4a3da0686d7c4d98e68d8d0856 /Zend/zend_operators.c
parent0ebb7335c9a8fa00e22dffb80be99bf208c82b9a (diff)
downloadphp-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.c29
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;
}