]> granicus.if.org Git - php/commitdiff
- Use pointer arithmetic to speed up the function a bit
authorAndi Gutmans <andi@php.net>
Sun, 28 May 2000 18:59:40 +0000 (18:59 +0000)
committerAndi Gutmans <andi@php.net>
Sun, 28 May 2000 18:59:40 +0000 (18:59 +0000)
Zend/zend_operators.c

index a058083ef85bff1052ab8a0ca749269cbcb5bb9f..2c0b36bbed74d0f13a19eed6000c5a1036eae345 100644 (file)
 
 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;
 }