mirror of
https://github.com/MidnightCommander/mc
synced 2025-01-01 00:54:24 +03:00
(mc_search_prepare): cache result.
mc_search_struct: add new member prepared.result to keep the result of the mc_search_prepare() first call. It can be used to check a regexp before call of mc_search_run() in a loop. Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
parent
975bf17d3b
commit
0222169206
@ -107,8 +107,11 @@ typedef struct mc_search_struct
|
|||||||
|
|
||||||
/* private data */
|
/* private data */
|
||||||
|
|
||||||
/* prepared */
|
struct
|
||||||
GPtrArray *prepared_conditions;
|
{
|
||||||
|
GPtrArray *conditions;
|
||||||
|
gboolean result;
|
||||||
|
} prepared;
|
||||||
|
|
||||||
/* original search string */
|
/* original search string */
|
||||||
gchar *original;
|
gchar *original;
|
||||||
|
@ -364,13 +364,13 @@ mc_search__regex_found_cond (mc_search_t * lc_mc_search, GString * search_str)
|
|||||||
{
|
{
|
||||||
gsize loop1;
|
gsize loop1;
|
||||||
|
|
||||||
for (loop1 = 0; loop1 < lc_mc_search->prepared_conditions->len; loop1++)
|
for (loop1 = 0; loop1 < lc_mc_search->prepared.conditions->len; loop1++)
|
||||||
{
|
{
|
||||||
mc_search_cond_t *mc_search_cond;
|
mc_search_cond_t *mc_search_cond;
|
||||||
mc_search__found_cond_t ret;
|
mc_search__found_cond_t ret;
|
||||||
|
|
||||||
mc_search_cond =
|
mc_search_cond =
|
||||||
(mc_search_cond_t *) g_ptr_array_index (lc_mc_search->prepared_conditions, loop1);
|
(mc_search_cond_t *) g_ptr_array_index (lc_mc_search->prepared.conditions, loop1);
|
||||||
|
|
||||||
if (!mc_search_cond->regex_handle)
|
if (!mc_search_cond->regex_handle)
|
||||||
continue;
|
continue;
|
||||||
|
@ -188,8 +188,8 @@ mc_search_free (mc_search_t * lc_mc_search)
|
|||||||
#endif
|
#endif
|
||||||
g_free (lc_mc_search->error_str);
|
g_free (lc_mc_search->error_str);
|
||||||
|
|
||||||
if (lc_mc_search->prepared_conditions != NULL)
|
if (lc_mc_search->prepared.conditions != NULL)
|
||||||
mc_search__conditions_free (lc_mc_search->prepared_conditions);
|
mc_search__conditions_free (lc_mc_search->prepared.conditions);
|
||||||
|
|
||||||
#ifdef SEARCH_TYPE_GLIB
|
#ifdef SEARCH_TYPE_GLIB
|
||||||
if (lc_mc_search->regex_match_info != NULL)
|
if (lc_mc_search->regex_match_info != NULL)
|
||||||
@ -211,6 +211,9 @@ mc_search_prepare (mc_search_t * lc_mc_search)
|
|||||||
{
|
{
|
||||||
GPtrArray *ret;
|
GPtrArray *ret;
|
||||||
|
|
||||||
|
if (lc_mc_search->prepared.conditions != NULL)
|
||||||
|
return lc_mc_search->prepared.result;
|
||||||
|
|
||||||
ret = g_ptr_array_new ();
|
ret = g_ptr_array_new ();
|
||||||
#ifdef HAVE_CHARSET
|
#ifdef HAVE_CHARSET
|
||||||
if (lc_mc_search->is_all_charsets)
|
if (lc_mc_search->is_all_charsets)
|
||||||
@ -256,9 +259,10 @@ mc_search_prepare (mc_search_t * lc_mc_search)
|
|||||||
lc_mc_search->original_len,
|
lc_mc_search->original_len,
|
||||||
str_detect_termencoding ()));
|
str_detect_termencoding ()));
|
||||||
#endif
|
#endif
|
||||||
lc_mc_search->prepared_conditions = ret;
|
lc_mc_search->prepared.conditions = ret;
|
||||||
|
lc_mc_search->prepared.result = (lc_mc_search->error == MC_SEARCH_E_OK);
|
||||||
|
|
||||||
return (lc_mc_search->error == MC_SEARCH_E_OK);
|
return lc_mc_search->prepared.result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
@ -299,7 +303,7 @@ mc_search_run (mc_search_t * lc_mc_search, const void *user_data,
|
|||||||
|
|
||||||
mc_search_set_error (lc_mc_search, MC_SEARCH_E_OK, NULL);
|
mc_search_set_error (lc_mc_search, MC_SEARCH_E_OK, NULL);
|
||||||
|
|
||||||
if ((lc_mc_search->prepared_conditions == NULL) && !mc_search_prepare (lc_mc_search))
|
if (!mc_search_prepare (lc_mc_search))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
switch (lc_mc_search->search_type)
|
switch (lc_mc_search->search_type)
|
||||||
|
Loading…
Reference in New Issue
Block a user