cvs: php4 /ext/ircg ircg.c

From: Date: Sat, 03 Mar 2001 16:26:55 +0000
Subject: cvs: php4 /ext/ircg ircg.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-4366@lists.php.net to get a copy of this message
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); }

« previous php.cvs (#4366) next »