summaryrefslogtreecommitdiff
path: root/src/analysis/scan/patterns/backends/acism.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/scan/patterns/backends/acism.c')
-rw-r--r--src/analysis/scan/patterns/backends/acism.c35
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*/