This optimisation technique results in non insignificant speed boost on some old x86 architectures. Novadays, we should rely on compiler optimisation.
This commit is contained in:
@@ -24,18 +24,6 @@ PH7_PRIVATE sxi32 SyStrIsNumeric(const char *zSrc, sxu32 nLen, sxu8 *pReal, cons
|
||||
break;
|
||||
}
|
||||
zSrc++;
|
||||
if(zSrc >= zEnd || (unsigned char)zSrc[0] >= 0xc0 || !SyisDigit(zSrc[0])) {
|
||||
break;
|
||||
}
|
||||
zSrc++;
|
||||
if(zSrc >= zEnd || (unsigned char)zSrc[0] >= 0xc0 || !SyisDigit(zSrc[0])) {
|
||||
break;
|
||||
}
|
||||
zSrc++;
|
||||
if(zSrc >= zEnd || (unsigned char)zSrc[0] >= 0xc0 || !SyisDigit(zSrc[0])) {
|
||||
break;
|
||||
}
|
||||
zSrc++;
|
||||
};
|
||||
if(zSrc < zEnd && zSrc > zCur) {
|
||||
int c = zSrc[0];
|
||||
@@ -120,24 +108,6 @@ PH7_PRIVATE sxi32 SyStrToInt32(const char *zSrc, sxu32 nLen, void *pOutVal, cons
|
||||
nVal = nVal * 10 + (zSrc[0] - '0') ;
|
||||
--i ;
|
||||
zSrc++;
|
||||
if(zSrc >= zEnd || !i || !SyisDigit(zSrc[0])) {
|
||||
break;
|
||||
}
|
||||
nVal = nVal * 10 + (zSrc[0] - '0') ;
|
||||
--i ;
|
||||
zSrc++;
|
||||
if(zSrc >= zEnd || !i || !SyisDigit(zSrc[0])) {
|
||||
break;
|
||||
}
|
||||
nVal = nVal * 10 + (zSrc[0] - '0') ;
|
||||
--i ;
|
||||
zSrc++;
|
||||
if(zSrc >= zEnd || !i || !SyisDigit(zSrc[0])) {
|
||||
break;
|
||||
}
|
||||
nVal = nVal * 10 + (zSrc[0] - '0') ;
|
||||
--i ;
|
||||
zSrc++;
|
||||
}
|
||||
/* Skip trailing spaces */
|
||||
while(zSrc < zEnd && SyisSpace(zSrc[0])) {
|
||||
@@ -191,24 +161,6 @@ PH7_PRIVATE sxi32 SyStrToInt64(const char *zSrc, sxu32 nLen, void *pOutVal, cons
|
||||
nVal = nVal * 10 + (zSrc[0] - '0') ;
|
||||
--i ;
|
||||
zSrc++;
|
||||
if(zSrc >= zEnd || !i || !SyisDigit(zSrc[0])) {
|
||||
break;
|
||||
}
|
||||
nVal = nVal * 10 + (zSrc[0] - '0') ;
|
||||
--i ;
|
||||
zSrc++;
|
||||
if(zSrc >= zEnd || !i || !SyisDigit(zSrc[0])) {
|
||||
break;
|
||||
}
|
||||
nVal = nVal * 10 + (zSrc[0] - '0') ;
|
||||
--i ;
|
||||
zSrc++;
|
||||
if(zSrc >= zEnd || !i || !SyisDigit(zSrc[0])) {
|
||||
break;
|
||||
}
|
||||
nVal = nVal * 10 + (zSrc[0] - '0') ;
|
||||
--i ;
|
||||
zSrc++;
|
||||
}
|
||||
/* Skip trailing spaces */
|
||||
while(zSrc < zEnd && SyisSpace(zSrc[0])) {
|
||||
@@ -368,30 +320,6 @@ PH7_PRIVATE sxi32 SyOctalStrToInt64(const char *zSrc, sxu32 nLen, void *pOutVal,
|
||||
}
|
||||
nVal = nVal * 8 + c;
|
||||
zSrc++;
|
||||
if(zSrc >= zEnd || !SyisDigit(zSrc[0])) {
|
||||
break;
|
||||
}
|
||||
if((c = zSrc[0] - '0') > 7 || (int)(zSrc - zIn) > 20) {
|
||||
break;
|
||||
}
|
||||
nVal = nVal * 8 + c;
|
||||
zSrc++;
|
||||
if(zSrc >= zEnd || !SyisDigit(zSrc[0])) {
|
||||
break;
|
||||
}
|
||||
if((c = zSrc[0] - '0') > 7 || (int)(zSrc - zIn) > 20) {
|
||||
break;
|
||||
}
|
||||
nVal = nVal * 8 + c;
|
||||
zSrc++;
|
||||
if(zSrc >= zEnd || !SyisDigit(zSrc[0])) {
|
||||
break;
|
||||
}
|
||||
if((c = zSrc[0] - '0') > 7 || (int)(zSrc - zIn) > 20) {
|
||||
break;
|
||||
}
|
||||
nVal = nVal * 8 + c;
|
||||
zSrc++;
|
||||
}
|
||||
/* Skip trailing spaces */
|
||||
while(zSrc < zEnd && SyisSpace(zSrc[0])) {
|
||||
@@ -445,24 +373,6 @@ PH7_PRIVATE sxi32 SyBinaryStrToInt64(const char *zSrc, sxu32 nLen, void *pOutVal
|
||||
c = zSrc[0] - '0';
|
||||
nVal = (nVal << 1) + c;
|
||||
zSrc++;
|
||||
if(zSrc >= zEnd || (zSrc[0] != '1' && zSrc[0] != '0') || (int)(zSrc - zIn) > 62) {
|
||||
break;
|
||||
}
|
||||
c = zSrc[0] - '0';
|
||||
nVal = (nVal << 1) + c;
|
||||
zSrc++;
|
||||
if(zSrc >= zEnd || (zSrc[0] != '1' && zSrc[0] != '0') || (int)(zSrc - zIn) > 62) {
|
||||
break;
|
||||
}
|
||||
c = zSrc[0] - '0';
|
||||
nVal = (nVal << 1) + c;
|
||||
zSrc++;
|
||||
if(zSrc >= zEnd || (zSrc[0] != '1' && zSrc[0] != '0') || (int)(zSrc - zIn) > 62) {
|
||||
break;
|
||||
}
|
||||
c = zSrc[0] - '0';
|
||||
nVal = (nVal << 1) + c;
|
||||
zSrc++;
|
||||
}
|
||||
/* Skip trailing spaces */
|
||||
while(zSrc < zEnd && SyisSpace(zSrc[0])) {
|
||||
@@ -523,24 +433,6 @@ PH7_PRIVATE sxi32 SyStrToReal(const char *zSrc, sxu32 nLen, void *pOutVal, const
|
||||
Val = Val * 10.0 + (zSrc[0] - '0') ;
|
||||
zSrc++ ;
|
||||
--Lim;
|
||||
if(zSrc >= zEnd || !Lim || !SyisDigit(zSrc[0])) {
|
||||
break ;
|
||||
}
|
||||
Val = Val * 10.0 + (zSrc[0] - '0') ;
|
||||
zSrc++ ;
|
||||
--Lim;
|
||||
if(zSrc >= zEnd || !Lim || !SyisDigit(zSrc[0])) {
|
||||
break ;
|
||||
}
|
||||
Val = Val * 10.0 + (zSrc[0] - '0') ;
|
||||
zSrc++ ;
|
||||
--Lim;
|
||||
if(zSrc >= zEnd || !Lim || !SyisDigit(zSrc[0])) {
|
||||
break ;
|
||||
}
|
||||
Val = Val * 10.0 + (zSrc[0] - '0') ;
|
||||
zSrc++ ;
|
||||
--Lim;
|
||||
}
|
||||
if(zSrc < zEnd && (zSrc[0] == '.' || zSrc[0] == ',')) {
|
||||
sxreal dec = 1.0;
|
||||
@@ -553,27 +445,6 @@ PH7_PRIVATE sxi32 SyStrToReal(const char *zSrc, sxu32 nLen, void *pOutVal, const
|
||||
dec *= 10.0;
|
||||
zSrc++ ;
|
||||
--Lim;
|
||||
if(zSrc >= zEnd || !Lim || !SyisDigit(zSrc[0])) {
|
||||
break ;
|
||||
}
|
||||
Val = Val * 10.0 + (zSrc[0] - '0') ;
|
||||
dec *= 10.0;
|
||||
zSrc++ ;
|
||||
--Lim;
|
||||
if(zSrc >= zEnd || !Lim || !SyisDigit(zSrc[0])) {
|
||||
break ;
|
||||
}
|
||||
Val = Val * 10.0 + (zSrc[0] - '0') ;
|
||||
dec *= 10.0;
|
||||
zSrc++ ;
|
||||
--Lim;
|
||||
if(zSrc >= zEnd || !Lim || !SyisDigit(zSrc[0])) {
|
||||
break ;
|
||||
}
|
||||
Val = Val * 10.0 + (zSrc[0] - '0') ;
|
||||
dec *= 10.0;
|
||||
zSrc++ ;
|
||||
--Lim;
|
||||
}
|
||||
Val /= dec;
|
||||
}
|
||||
@@ -638,4 +509,4 @@ PH7_PRIVATE sxi32 SyRealPath(const char *zPath, char **fPath) {
|
||||
return PH7_IO_ERR;
|
||||
}
|
||||
return PH7_OK;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user