X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Finclude%2Fcore%2Fstore.h;h=e83ff8486ebcf2a8d21a49a9c8da87ddeceba9ec;hb=47a1228872b3df692d8b17b7b85d1a863faf4fd7;hp=68f094b4a9d996a85fb40292656e9fcad4bd8cff;hpb=ff6cf34ee7a8db747d8284b5c5532f8d13b7cea5;p=sysdb.git diff --git a/src/include/core/store.h b/src/include/core/store.h index 68f094b..e83ff84 100644 --- a/src/include/core/store.h +++ b/src/include/core/store.h @@ -113,6 +113,13 @@ struct sdb_store_expr; typedef struct sdb_store_expr sdb_store_expr_t; #define SDB_STORE_EXPR(obj) ((sdb_store_expr_t *)(obj)) +/* + * An expression iterator iterates over the values of an iterable expression + * (see sdb_store_expr_iterable). + */ +struct sdb_store_expr_iter; +typedef struct sdb_store_expr_iter sdb_store_expr_iter_t; + /* * Store matchers may be used to lookup hosts from the store based on their * various attributes. Service and attribute matchers are applied to a host's @@ -425,6 +432,34 @@ int sdb_store_expr_eval(sdb_store_expr_t *expr, sdb_store_obj_t *obj, sdb_data_t *res, sdb_store_matcher_t *filter); +/* + * sdb_store_expr_iterable: + * Check whether an expression, evaluated in the specified context (HOST, + * SERVICE, METRIC) is iterable, that is, if it may evaluate to multiple + * values. + */ +bool +sdb_store_expr_iterable(sdb_store_expr_t *expr, int context); + +/* + * sdb_store_expr_iter: + * Iterate over the elements of an iterable expression. sdb_store_expr_iter + * returns NULL if the expression is not iterable (for the specified object). + * See also sdb_store_expr_iterable. + * + * sdb_store_expr_iter_get_next returns NULL if there is no next element. + */ +sdb_store_expr_iter_t * +sdb_store_expr_iter(sdb_store_expr_t *expr, sdb_store_obj_t *obj, + sdb_store_matcher_t *filter); +void +sdb_store_expr_iter_destroy(sdb_store_expr_iter_t *iter); + +bool +sdb_store_expr_iter_has_next(sdb_store_expr_iter_t *iter); +sdb_data_t +sdb_store_expr_iter_get_next(sdb_store_expr_iter_t *iter); + /* * sdb_store_dis_matcher: * Creates a matcher matching the disjunction (logical OR) of two matchers.