diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2024-01-28 20:07:24 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2024-01-28 20:07:24 (GMT) |
commit | 3231349bac6aae1f236416a8a51f41caccc38961 (patch) | |
tree | eb3893589a6d354198afd2e60c04f04093f165ec /src/analysis/scan/patterns/backends | |
parent | e5abd7f0ddecbccf58eeb34207c5a623b24e1557 (diff) |
Update the current scan backend warm-up.
Diffstat (limited to 'src/analysis/scan/patterns/backends')
-rw-r--r-- | src/analysis/scan/patterns/backends/acism.c | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/src/analysis/scan/patterns/backends/acism.c b/src/analysis/scan/patterns/backends/acism.c index a36e4b7..d517168 100644 --- a/src/analysis/scan/patterns/backends/acism.c +++ b/src/analysis/scan/patterns/backends/acism.c @@ -37,10 +37,10 @@ /* ---------------------- IMPLANTATION D'UNE NOUVELLE APPROCHE ---------------------- */ -/* Initialise la classe des méthodes basée sur Bitmap. */ +/* Initialise la classe des méthodes basée sur ACISM. */ static void g_acism_backend_class_init(GAcismBackendClass *); -/* Initialise une instance de méthodes basée sur Bitmap. */ +/* Initialise une instance de méthodes basée sur ACISM. */ static void g_acism_backend_init(GAcismBackend *); /* Supprime toutes les références externes. */ @@ -92,15 +92,15 @@ static void g_acism_backend_prepare_interleave_array(GAcismBackend *); /* Compresse l'arborescence dans un tableau de position. */ static void g_acism_backend_build_interleave_array(GAcismBackend *); -/* Détermine le nombre d'identifiants constitués. */ -static size_t g_acism_backend_count_plain_pattern_ids(const GAcismBackend *); - /* Met en ordre les derniers détails avant un premier scan. */ -static void g_acism_backend_warm_up(GAcismBackend *); +static bool g_acism_backend_warm_up(GAcismBackend *); /* Récupère les identifiants finaux pour un motif recherché. */ static patid_t g_acism_backend_build_plain_pattern_id(const GAcismBackend *, const uint32_t [2]); +/* Détermine le nombre d'identifiants constitués. */ +static size_t g_acism_backend_count_plain_pattern_ids(const GAcismBackend *); + /* Parcours un contenu binaire à la recherche de motifs. */ static void g_acism_backend_run_scan(const GAcismBackend *, GScanContext *); @@ -125,7 +125,7 @@ G_DEFINE_TYPE(GAcismBackend, g_acism_backend, G_TYPE_ENGINE_BACKEND); * * * Paramètres : klass = classe à initialiser. * * * -* Description : Initialise la classe des méthodes basée sur Bitmap. * +* Description : Initialise la classe des méthodes basée sur ACISM. * * * * Retour : - * * * @@ -160,7 +160,7 @@ static void g_acism_backend_class_init(GAcismBackendClass *klass) * * * Paramètres : backend = instance à initialiser. * * * -* Description : Initialise une instance de méthodes basée sur Bitmap. * +* Description : Initialise une instance de méthodes basée sur ACISM. * * * * Retour : - * * * @@ -1121,14 +1121,18 @@ static void g_acism_backend_build_interleave_array(GAcismBackend *backend) * * * Description : Met en ordre les derniers détails avant un premier scan. * * * -* Retour : - * +* Retour : Bilan de l'opération. * * * * Remarques : - * * * ******************************************************************************/ -static void g_acism_backend_warm_up(GAcismBackend *backend) +static bool g_acism_backend_warm_up(GAcismBackend *backend) { + bool result; /* Bilan à retourner */ + + result = true; + #ifdef __USE_BYTE_FREQ /** @@ -1163,6 +1167,8 @@ static void g_acism_backend_warm_up(GAcismBackend *backend) g_acism_backend_build_interleave_array(backend); + return result; + } @@ -1184,6 +1190,8 @@ static patid_t g_acism_backend_build_plain_pattern_id(const GAcismBackend *backe patid_t result; /* Identifiant à retourner */ acism_source_t *source; /* Motif d'origine concerné */ + assert(tmp_id[0] < backend->sources_count); + source = backend->sources + tmp_id[0]; result = source->coverage[SOURCE_COVERAGE_START] + tmp_id[1]; @@ -1211,7 +1219,10 @@ static size_t g_acism_backend_count_plain_pattern_ids(const GAcismBackend *backe { size_t result; /* Quantité à retourner */ - result = backend->sources[backend->sources_count -1].coverage[SOURCE_COVERAGE_END]; + if (backend->sources_count == 0) + result = 0; + else + result = backend->sources[backend->sources_count - 1].coverage[SOURCE_COVERAGE_END]; return result; @@ -1248,8 +1259,8 @@ static void g_acism_backend_run_scan(const GAcismBackend *backend, GScanContext acism_code_t code; /* Code du caractère courant */ unsigned int next; /* Prochaine tête à valider */ acism_state_t next_state; /* Prochaine tête à valider */ - uint32_t final_k; /* Dernier indice à traiter */ uint32_t k; /* Boucle de parcours #2 */ + uint32_t final_k; /* Dernier indice à traiter */ unsigned int iter; /* Boucle de parcours #3 */ acism_state_t test_state; /* Test de validité alternative*/ acism_state_t sub_state; /* Test de validité alternative*/ |