sas Sat Mar 3 08:26:55 2001 EDT
Modified files:
/php4/ext/ircg ircg.c
Log:
Improve the speed of format_msg() (5 fold increase).
We are still spending too much time in ircg_mirc_color(). According
to gprof on FreeBSD, it is something like 20% for encoding short
plain text messages.
Index: php4/ext/ircg/ircg.c
diff -u php4/ext/ircg/ircg.c:1.41 php4/ext/ircg/ircg.c:1.42
--- php4/ext/ircg/ircg.c:1.41 Fri Mar 2 12:32:42 2001
+++ php4/ext/ircg/ircg.c Sat Mar 3 08:26:55 2001
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: ircg.c,v 1.41 2001/03/02 20:32:42 sas Exp $ */
+/* $Id: ircg.c,v 1.42 2001/03/03 16:26:55 sas Exp $ */
#include "php.h"
#include "php_ini.h"
@@ -187,58 +187,62 @@
{
const char *p;
char c;
- int mode = 0;
+ char *q;
smart_str encoded_msg = {0};
-
+ int encoded = 0;
+ unsigned long len;
+
if (fmt[0] == '\0') {
return;
}
- if (msg) {
- ircg_mirc_color(msg, &encoded_msg);
- }
-
- for (p = fmt; (c = *p); p++) {
- switch (mode) {
- case 0:
- switch (c) {
- case '%':
- mode = 1;
- break;
- default:
- smart_str_appendc_ex(result, c, 1);
- }
+ p = fmt;
+ while (q = strchr(p, '%')) {
+ len = q - p;
+ if (len > 0)
+ smart_str_appendl_ex(result, p, len, 1);
+
+ c = q[1];
+
+ switch (c) {
+ case 'c':
+ smart_str_appends_ex(result, channel, 1);
+ break;
+ case 't':
+ smart_str_appends_ex(result, to, 1);
break;
- case 1:
- switch (c) {
- case '%':
- smart_str_appendc_ex(result, c, 1);
- break;
- case 'c':
- smart_str_appends_ex(result, channel, 1);
- break;
- case 't':
- smart_str_appends_ex(result, to, 1);
- break;
- case 'f':
- smart_str_appends_ex(result, from, 1);
- break;
- case 'm':
- smart_str_append_ex(result, &encoded_msg, 1);
- break;
- case 'r':
- smart_str_appends_ex(result, msg, 1);
- break;
- default:
- smart_str_appendc_ex(result, '%', 1);
- smart_str_appendc_ex(result, c, 1);
+ case 'f':
+ smart_str_appends_ex(result, from, 1);
+ break;
+ case 'm':
+ if (!encoded) {
+ ircg_mirc_color(msg, &encoded_msg);
+ encoded = 1;
}
- mode = 0;
+ smart_str_append_ex(result, &encoded_msg, 1);
+ break;
+ case '%':
+ smart_str_appendc_ex(result, c, 1);
+ break;
+ case 'r':
+ smart_str_appends_ex(result, msg, 1);
break;
+ case 0:
+ goto finish_loop;
+ default:
+ smart_str_appendc_ex(result, '%', 1);
+ smart_str_appendc_ex(result, c, 1);
}
+ p = q + 2;
+ }
+
+finish_loop:
+ if (*p) {
+ smart_str_appends_ex(result, p, 1);
}
- smart_str_free(&encoded_msg);
+ if (encoded)
+ smart_str_free(&encoded_msg);
smart_str_0(result);
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]