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 | |
parent | e5abd7f0ddecbccf58eeb34207c5a623b24e1557 (diff) |
Update the current scan backend warm-up.
Diffstat (limited to 'src/analysis/scan/patterns')
-rw-r--r-- | src/analysis/scan/patterns/backend-int.h | 2 | ||||
-rw-r--r-- | src/analysis/scan/patterns/backend.c | 11 | ||||
-rw-r--r-- | src/analysis/scan/patterns/backend.h | 2 | ||||
-rw-r--r-- | src/analysis/scan/patterns/backends/acism.c | 35 |
4 files changed, 33 insertions, 17 deletions
diff --git a/src/analysis/scan/patterns/backend-int.h b/src/analysis/scan/patterns/backend-int.h index 90daec9..aeabe1b 100644 --- a/src/analysis/scan/patterns/backend-int.h +++ b/src/analysis/scan/patterns/backend-int.h @@ -36,7 +36,7 @@ typedef size_t (* get_backend_atom_max_size_fc) (const GEngineBackend *); typedef patid_t (* enroll_plain_into_backend_fc) (GEngineBackend *, const uint8_t *, size_t, uint32_t [2]); /* Met en ordre les derniers détails avant un premier scan. */ -typedef void (* warm_up_backend_fc) (GEngineBackend *); +typedef bool (* warm_up_backend_fc) (GEngineBackend *); /* Récupère les identifiants finaux pour un motif recherché. */ typedef patid_t (* build_backend_plain_pattern_id_fc) (const GEngineBackend *, const uint32_t [2]); diff --git a/src/analysis/scan/patterns/backend.c b/src/analysis/scan/patterns/backend.c index 50cc889..a887600 100644 --- a/src/analysis/scan/patterns/backend.c +++ b/src/analysis/scan/patterns/backend.c @@ -187,20 +187,25 @@ bool g_engine_backend_enroll_plain_pattern(GEngineBackend *backend, const uint8_ * * * Description : Met en ordre les derniers détails avant un premier scan. * * * -* Retour : - * +* Retour : Bilan de l'opération. * * * * Remarques : - * * * ******************************************************************************/ -void g_engine_backend_warm_up(GEngineBackend *backend) +bool g_engine_backend_warm_up(GEngineBackend *backend) { + bool result; /* Bilan à retourner */ GEngineBackendClass *class; /* Classe à activer */ class = G_ENGINE_BACKEND_GET_CLASS(backend); if (class->warm_up != NULL) - class->warm_up(backend); + result = class->warm_up(backend); + else + result = true; + + return result; } diff --git a/src/analysis/scan/patterns/backend.h b/src/analysis/scan/patterns/backend.h index 71c97d1..3f9be03 100644 --- a/src/analysis/scan/patterns/backend.h +++ b/src/analysis/scan/patterns/backend.h @@ -60,7 +60,7 @@ size_t g_engine_backend_get_atom_max_size(const GEngineBackend *); bool g_engine_backend_enroll_plain_pattern(GEngineBackend *, const uint8_t *, size_t, uint32_t [2]); /* Met en ordre les derniers détails avant un premier scan. */ -void g_engine_backend_warm_up(GEngineBackend *); +bool g_engine_backend_warm_up(GEngineBackend *); /* Récupère les identifiants finaux pour un motif recherché. */ patid_t g_engine_backend_build_plain_pattern_id(const GEngineBackend *, const uint32_t [2]); 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*/ |