gint ret = 0, rc = 0;
gchar t;
+ if (isset (cd->checked, cd->composite->id * 2)) {
+ /* We have already checked this composite, so just return its value */
+ rc = isset (cd->checked, cd->composite->id * 2 + 1);
+ return rc;
+ }
+
if (*sym == '~' || *sym == '-') {
t = *sym ++;
}
rd);
}
}
+
+ return rc;
}
/*
static void
rspamd_composite_expr_destroy (rspamd_expression_atom_t *atom)
{
-
+ /* Composite atoms are destroyed just with the pool */
}
static gint
static void
composites_foreach_callback (gpointer key, gpointer value, void *data)
{
+ struct composites_data *cd = data;
+ struct rspamd_composite *comp = value;
+ gint rc;
-}
+ cd->composite = comp;
+ rc = rspamd_process_expression (comp->expr, cd);
+
+ /* Checked bit */
+ setbit (cd->checked, comp->id * 2);
+ /* Result bit */
+ if (rc) {
+ setbit (cd->checked, comp->id * 2 + 1);
+ }
+ else {
+ clrbit (cd->checked, comp->id * 2 + 1);
+ }
+}
static gboolean
double grow_factor; /**< current grow factor */
};
+
+/**
+ * Subr for composite expressions
+ */
+extern const struct rspamd_atom_subr composite_expr_subr;
/**
* Composite structure
*/