helly Tue Feb 11 15:30:37 2003 EDT Modified files: /php4/main spprintf.c Log: speed up Index: php4/main/spprintf.c diff -u php4/main/spprintf.c:1.11 php4/main/spprintf.c:1.12 --- php4/main/spprintf.c:1.11 Tue Dec 31 10:58:54 2002 +++ php4/main/spprintf.c Tue Feb 11 15:30:37 2003 @@ -177,6 +177,20 @@ cc++; \ } +#define INS_STRING(xbuf, s, slen, cc) \ + xbuf_resize(xbuf, s_len); \ + if (xbuf->nextb+slen < xbuf->buf_end) { \ + memcpy(xbuf->nextb, s, slen); \ + xbuf->nextb += slen; \ + cc += slen; \ + s += slen; \ + } else { \ + for (i = s_len; i != 0; i--) { \ + INS_CHAR_NR(xbuf, *s, cc); \ + s++; \ + } \ + } + #define INS_CHAR(xbuf, ch, cc) \ xbuf_resize(xbuf, 1); \ INS_CHAR_NR(xbuf, ch, cc) @@ -185,14 +199,21 @@ * Macro that does padding. The padding is done by printing * the character ch. */ -#define PAD(xbuf, width, len, ch) \ +#define PAD(xbuf, width, len, ch, cc) \ if (width > len) { \ - xbuf_resize(xbuf, width-len); \ - do { \ - INS_CHAR_NR(xbuf, ch, cc); \ - width--; \ + int slen = width-len; \ + xbuf_resize(xbuf, slen); \ + if (xbuf->nextb+slen < xbuf->buf_end) { \ + memset(xbuf->nextb, ch, slen);\ + xbuf->nextb += slen; \ + cc += slen; \ + } else { \ + do { \ + INS_CHAR_NR(xbuf, ch, cc); \ + width--; \ + } \ + while (width > len); \ } \ - while (width > len);\ } #define NUM(c) (c - '0') @@ -577,19 +598,15 @@ s_len--; min_width--; } - PAD(xbuf, min_width, s_len, pad_char); + PAD(xbuf, min_width, s_len, pad_char, cc); } /* * Print the string s. */ - xbuf_resize(xbuf, s_len); - for (i = s_len; i != 0; i--) { - INS_CHAR_NR(xbuf, *s, cc); - s++; - } + INS_STRING(xbuf, s, s_len, cc); if (adjust_width && adjust == LEFT && min_width > s_len) - PAD(xbuf, min_width, s_len, pad_char); + PAD(xbuf, min_width, s_len, pad_char, cc); } fmt++; }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php