1
1

Some optimization of loops in translation functions.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
Этот коммит содержится в:
Andrew Borodin 2010-10-21 17:33:32 +04:00 коммит произвёл Slava Zanko
родитель b6fd832a8a
Коммит 54a9e72250
3 изменённых файлов: 35 добавлений и 47 удалений

Просмотреть файл

@ -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;
}

Просмотреть файл

@ -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);

Просмотреть файл

@ -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;
}