summaryrefslogtreecommitdiff
path: root/src/analysis/scan/expr.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/scan/expr.h')
-rw-r--r--src/analysis/scan/expr.h27
1 files changed, 26 insertions, 1 deletions
diff --git a/src/analysis/scan/expr.h b/src/analysis/scan/expr.h
index d596222..dd4bc3f 100644
--- a/src/analysis/scan/expr.h
+++ b/src/analysis/scan/expr.h
@@ -64,6 +64,16 @@ typedef enum _ExprValueType
} ExprValueType;
+/* Etat de l'expression vis à vis des réductions */
+typedef enum _ScanReductionState
+{
+ SRS_PENDING, /* Nature à déterminer */
+ SRS_REDUCED, /* Nature compacte finale */
+ SRS_WAIT_FOR_SCAN, /* Nature vouée à évoluer */
+ SRS_UNRESOLVABLE, /* Nature indéterminable */
+
+} ScanReductionState;
+
/* Indique le type défini pour une expression de validation. */
GType g_scan_expression_get_type(void);
@@ -78,7 +88,22 @@ bool g_scan_expression_check_validity(const GScanExpression *);
GScanExpression *g_scan_expression_duplicate(const GScanExpression *);
/* Réduit une expression à une forme plus simple. */
-bool g_scan_expression_reduce(GScanExpression *, GScanContext *, GScanScope *, GScanExpression **);
+ScanReductionState g_scan_expression_reduce(GScanExpression *, GScanContext *, GScanScope *, GScanExpression **);
+
+/* Réduit une expression à une forme booléenne. */
+bool g_scan_expression_reduce_to_boolean(GScanExpression *, GScanContext *, GScanScope *, GScanExpression **);
+
+/* Détermine si l'expression peut représenter un ensemble. */
+bool g_scan_expression_handle_set_features(const GScanExpression *);
+
+/* Dénombre les éléments portés par une expression. */
+bool g_scan_expression_count_items(const GScanExpression *, size_t *);
+
+/* Fournit un élément donné issu d'un ensemble constitué. */
+bool g_scan_expression_get_item(const GScanExpression *, size_t, GScanExpression **);
+
+/* Réalise l'intersection entre deux ensembles. */
+GScanExpression *g_scan_expression_intersect(GScanExpression *, const GScanExpression *, GScanContext *, GScanScope *);