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]

Reply via email to