Browse Source

Some optimization of loops in translation functions.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
Andrew Borodin 14 years ago
parent
commit
54a9e72250
3 changed files with 35 additions and 47 deletions
  1. 10 29
      lib/search/glob.c
  2. 18 10
      lib/search/hex.c
  3. 7 8
      lib/search/normal.c

+ 10 - 29
lib/search/glob.c

@@ -52,55 +52,38 @@ mc_search__glob_translate_to_regex (const GString * astr)
 {
     const char *str = astr->str;
     GString *buff;
-    gsize loop = 0;
+    gsize loop;
     gboolean inside_group = FALSE;
 
     buff = g_string_sized_new (32);
 
-    while (loop < astr->len)
-    {
+    for (loop = 0; loop < astr->len; loop++)
         switch (str[loop])
         {
         case '*':
             if (!strutils_is_char_escaped (str, &(str[loop])))
-            {
-                g_string_append (buff, (inside_group) ? ".*" : "(.*)");
-                loop++;
-                continue;
-            }
+                g_string_append (buff, inside_group ? ".*" : "(.*)");
             break;
         case '?':
             if (!strutils_is_char_escaped (str, &(str[loop])))
-            {
-                g_string_append (buff, (inside_group) ? "." : "(.)");
-                loop++;
-                continue;
-            }
+                g_string_append (buff, inside_group ? "." : "(.)");
             break;
         case ',':
             if (!strutils_is_char_escaped (str, &(str[loop])))
-            {
-                g_string_append (buff, "|");
-                loop++;
-                continue;
-            }
+                g_string_append_c (buff, '|');
             break;
         case '{':
             if (!strutils_is_char_escaped (str, &(str[loop])))
             {
-                g_string_append (buff, "(");
+                g_string_append_c (buff, '(');
                 inside_group = TRUE;
-                loop++;
-                continue;
             }
             break;
         case '}':
             if (!strutils_is_char_escaped (str, &(str[loop])))
             {
-                g_string_append (buff, ")");
+                g_string_append_c (buff, ')');
                 inside_group = FALSE;
-                loop++;
-                continue;
             }
             break;
         case '+':
@@ -110,13 +93,11 @@ mc_search__glob_translate_to_regex (const GString * astr)
         case ')':
         case '^':
             g_string_append_c (buff, '\\');
+            /* fall through */
+        default:
             g_string_append_c (buff, str[loop]);
-            loop++;
-            continue;
+            break;
         }
-        g_string_append_c (buff, str[loop]);
-        loop++;
-    }
 
     return buff;
 }

+ 18 - 10
lib/search/hex.c

@@ -53,7 +53,7 @@ mc_search__hex_translate_to_regex (const GString * astr)
 {
     const char *str = astr->str;
     GString *buff;
-    gchar *tmp_str, *tmp_str2;
+    gchar *tmp_str;
     gsize loop = 0;
     int val, ptr;
 
@@ -61,33 +61,41 @@ mc_search__hex_translate_to_regex (const GString * astr)
     tmp_str = g_strndup (str, astr->len);
     g_strchug (tmp_str);        /* trim leadind whitespaces */
 
-    while (loop < astr->len) {
-        if (sscanf (tmp_str + loop, "%i%n", &val, &ptr)) {
-            if (val < -128 || val > 255) {
+    while (loop < astr->len)
+    {
+        if (sscanf (tmp_str + loop, "%i%n", &val, &ptr))
+        {
+            gchar *tmp_str2;
+
+            if (val < -128 || val > 255)
+            {
                 loop++;
                 continue;
             }
+
             tmp_str2 = g_strdup_printf ("\\x%02X", (unsigned char) val);
             g_string_append (buff, tmp_str2);
             g_free (tmp_str2);
             loop += ptr;
-            continue;
         }
-
-        if (*(tmp_str + loop) == '"') {
+        else if (*(tmp_str + loop) == '"')
+        {
             gsize loop2 = 0;
+
             loop++;
-            while (loop + loop2 < astr->len) {
+            while (loop + loop2 < astr->len)
+            {
                 if (*(tmp_str + loop + loop2) == '"' &&
                     !strutils_is_char_escaped (tmp_str, tmp_str + loop + loop2))
                     break;
                 loop2++;
             }
+
             g_string_append_len (buff, tmp_str + loop, loop2 - 1);
             loop += loop2;
-            continue;
         }
-        loop++;
+        else
+            loop++;
     }
 
     g_free (tmp_str);

+ 7 - 8
lib/search/normal.c

@@ -50,12 +50,13 @@ mc_search__normal_translate_to_regex (const GString * astr)
 {
     const char *str = astr->str;
     GString *buff;
-    gsize loop = 0;
+    gsize loop;
 
     buff = g_string_sized_new (32);
 
-    while (loop < astr->len) {
-        switch (str[loop]) {
+    for (loop = 0; loop < astr->len; loop++)
+        switch (str[loop])
+        {
         case '*':
         case '?':
         case ',':
@@ -73,13 +74,11 @@ mc_search__normal_translate_to_regex (const GString * astr)
         case '-':
         case '|':
             g_string_append_c (buff, '\\');
+            /* fall through */
+        default:
             g_string_append_c (buff, str[loop]);
-            loop++;
-            continue;
+            break;
         }
-        g_string_append_c (buff, str[loop]);
-        loop++;
-    }
 
     return buff;
 }