index 4e8d468c4263f0e57cd2f26d301aedf0006102a7..574b01ed262adcfd88d2a6be63afdff7285300a9 100644 (file)
--- a/src/include/core/store.h
+++ b/src/include/core/store.h
sdb_store_service_attr(const char *hostname, const char *service,
const char *key, const sdb_data_t *value, sdb_time_t last_update);
+/*
+ * Expressions specify arithmetic expressions.
+ *
+ * A expression object inherits from sdb_object_t and, thus, may safely be
+ * cast to a generic object.
+ */
+struct sdb_store_expr;
+typedef struct sdb_store_expr sdb_store_expr_t;
+#define SDB_STORE_EXPR(obj) ((sdb_store_expr_t *)(obj))
+
+/*
+ * sdb_store_expr_create:
+ * Creates an arithmetic expression implementing the specified operator on the
+ * specified left and right operand.
+ *
+ * Returns:
+ * - an expression object on success
+ * - NULL else
+ */
+sdb_store_expr_t *
+sdb_store_expr_create(int op, sdb_store_expr_t *left, sdb_store_expr_t *right);
+
+/*
+ * sdb_store_expr_constvalue:
+ * Creates an expression which evaluates to the specified constant value.
+ *
+ * Returns:
+ * - an expression object on success
+ * - NULL else
+ */
+sdb_store_expr_t *
+sdb_store_expr_constvalue(const sdb_data_t *value);
+
+/*
+ * sdb_store_expr_eval:
+ * Evaluate an expression and stores the result in 'res'. The result's value
+ * will be allocated dynamically if necessary and, thus, should be free'd by
+ * the caller (e.g. using sdb_data_free_datum);
+ *
+ * Returns:
+ * - 0 on success
+ * - a negative value else
+ */
+int
+sdb_store_expr_eval(sdb_store_expr_t *expr, sdb_data_t *res);
+
/*
* Conditionals may be used to lookup hosts from the store based on a
* conditional expression.
/*
* sdb_store_attr_cond:
* Creates a conditional based on attribute values. The value of stored
- * attributes is compared against the specified value. See sdb_data_cmp for
- * details about the comparison.
+ * attributes is compared against the value the expression evaluates to. See
+ * sdb_data_cmp for details about the comparison.
*/
sdb_store_cond_t *
-sdb_store_attr_cond(const char *name, const sdb_data_t *value);
+sdb_store_attr_cond(const char *name, sdb_store_expr_t *expr);
/*
* Store matchers may be used to lookup hosts from the store based on their
/*
* sdb_store_matcher_parse_cmp:
- * Parse a simple compare expression (<obj_type>.<attr> <op> <value>).
+ * Parse a simple compare expression (<obj_type>.<attr> <op> <expression>).
*
* Returns:
* - a matcher object on success
*/
sdb_store_matcher_t *
sdb_store_matcher_parse_cmp(const char *obj_type, const char *attr,
- const char *op, const sdb_data_t *value);
+ const char *op, sdb_store_expr_t *expr);
/*
* sdb_store_dis_matcher: