summaryrefslogtreecommitdiff
path: root/src/analysis/scan/patterns/backends/acism-int.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/scan/patterns/backends/acism-int.h')
-rw-r--r--src/analysis/scan/patterns/backends/acism-int.h63
1 files changed, 44 insertions, 19 deletions
diff --git a/src/analysis/scan/patterns/backends/acism-int.h b/src/analysis/scan/patterns/backends/acism-int.h
index 57c3c73..a8cfd59 100644
--- a/src/analysis/scan/patterns/backends/acism-int.h
+++ b/src/analysis/scan/patterns/backends/acism-int.h
@@ -36,7 +36,7 @@
-//#define __USE_BYTE_FREQ
+#define __USE_BYTE_FREQ
//#define __SORT_BEFORE_BITMASK
@@ -68,6 +68,8 @@ typedef uint16_t acism_code_t;
#define MIN_ACISM_CODE 0
#define MAX_ACISM_CODE 0xffff
+#define ROOT_STATE_INDEX 0
+
/* Noeud de l'arborescence brute */
typedef struct _acism_trie_node_t
{
@@ -91,35 +93,58 @@ typedef struct _acism_trie_node_t
} acism_trie_node_t;
+#if __LONG_WIDTH__ < 64
+
/* Cellule du tableau compressé final */
-typedef union _acism_state_t
+typedef struct _acism_state_t
{
- uint32_t raw; /* Valeur brute */
-
- struct
+ union
{
- union
+ /* Indice 0 */
+ struct
{
- /* Indice 0 */
- struct
- {
- unsigned int match : 1; /* Correspondance ici */
- unsigned int suffix : 1; /* Correspondance ailleurs */
- unsigned int unused : 4; /* Espace encore disponible */
- unsigned int atom_size : 3; /* Taille d'atome représenté */
- };
-
- /* Indice 1 et + */
- unsigned int code : 9; /* Position depuis la base */
-
+ unsigned int match : 1; /* Correspondance ici */
+ unsigned int unused : 4; /* Espace encore disponible */
+ unsigned int atom_size : 3; /* Taille d'atome représenté */
+ unsigned int suffix : 1; /* Correspondance ailleurs */
};
- unsigned int index : 23; /* Indice de saut */
+ /* Indice 1 et + */
+ unsigned int code : 9; /* Position depuis la base */
+
+ };
+
+ unsigned int index : 23; /* Indice de saut */
+
+} acism_state_t;
+
+#else
+/* Cellule du tableau compressé final */
+typedef union _acism_state_t
+{
+ /* Indice 0 */
+ struct
+ {
+ uint8_t match : 1; /* Correspondance ici */
+ uint8_t atom_size; /* Indice de saut */
+ uint8_t suffix : 1; /* Correspondance ailleurs */
+ };
+
+ /* Indice 1 et + */
+ uint32_t code; /* Position depuis la base */
+
+ /* Tous */
+ struct
+ {
+ uint32_t any; /* Saut de bits */
+ uint32_t index; /* Indice de saut */
};
} acism_state_t;
+#endif
+
/* Méthode de recherche basée sur l'algorithme Acism (instance) */
struct _GAcismBackend
{