From: Sebastian Harl Date: Sat, 5 Apr 2014 16:41:26 +0000 (+0200) Subject: store: Moved matcher types to store-private.h. X-Git-Tag: sysdb-0.1.0~147 X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=commitdiff_plain;h=5e3ba235ca69e67baa9945a2c0be8a7270485656 store: Moved matcher types to store-private.h. --- diff --git a/src/core/store-private.h b/src/core/store-private.h index a5bf026..22f6e07 100644 --- a/src/core/store-private.h +++ b/src/core/store-private.h @@ -34,6 +34,9 @@ #include "core/store.h" +#include +#include + #ifdef __cplusplus extern "C" { #endif @@ -84,6 +87,79 @@ enum { #define _last_update super.last_update #define _interval super.interval +/* + * matchers + */ + +/* when adding to this, also update 'matchers' in store_lookup.c */ +enum { + MATCHER_OR, + MATCHER_AND, + MATCHER_ATTR, + MATCHER_SERVICE, + MATCHER_HOST, +}; + +/* match the name of something */ +typedef struct { + char *name; + regex_t *name_re; +} name_matcher_t; + +/* matcher base type */ +struct sdb_store_matcher { + sdb_object_t super; + /* type of the matcher */ + int type; +}; +#define M(m) ((sdb_store_matcher_t *)(m)) + +/* logical operator matcher */ +typedef struct { + sdb_store_matcher_t super; + + /* left and right hand operands */ + sdb_store_matcher_t *left; + sdb_store_matcher_t *right; +} op_matcher_t; +#define OP_M(m) ((op_matcher_t *)(m)) + +/* match any type of object by it's base information */ +typedef struct { + sdb_store_matcher_t super; + + /* match by the name of the object */ + name_matcher_t name; +} obj_matcher_t; +#define OBJ_M(m) ((obj_matcher_t *)(m)) + +/* match attributes */ +typedef struct { + obj_matcher_t super; + /* XXX: this needs to be more flexible; + * add support for type-specific operators */ + name_matcher_t value; +} attr_matcher_t; +#define ATTR_M(m) ((attr_matcher_t *)(m)) + +/* match services */ +typedef struct { + obj_matcher_t super; + /* match by attributes assigned to the service */ + attr_matcher_t *attr; +} service_matcher_t; +#define SERVICE_M(m) ((service_matcher_t *)(m)) + +/* match hosts */ +typedef struct { + obj_matcher_t super; + /* match by services assigned to the host */ + service_matcher_t *service; + /* match by attributes assigned to the host */ + attr_matcher_t *attr; +} host_matcher_t; +#define HOST_M(m) ((host_matcher_t *)(m)) + #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/src/core/store_lookup.c b/src/core/store_lookup.c index b0b7bf8..45e7839 100644 --- a/src/core/store_lookup.c +++ b/src/core/store_lookup.c @@ -51,66 +51,6 @@ * private data types */ -/* match the name of something */ -typedef struct { - char *name; - regex_t *name_re; -} name_matcher_t; - -/* matcher base type */ -struct sdb_store_matcher { - sdb_object_t super; - /* type of the matcher */ - int type; -}; -#define M(m) ((sdb_store_matcher_t *)(m)) - -/* logical operator matcher */ -typedef struct { - sdb_store_matcher_t super; - - /* left and right hand operands */ - sdb_store_matcher_t *left; - sdb_store_matcher_t *right; -} op_matcher_t; -#define OP_M(m) ((op_matcher_t *)(m)) - -/* match any type of object by it's base information */ -typedef struct { - sdb_store_matcher_t super; - - /* match by the name of the object */ - name_matcher_t name; -} obj_matcher_t; -#define OBJ_M(m) ((obj_matcher_t *)(m)) - -/* match attributes */ -typedef struct { - obj_matcher_t super; - /* XXX: this needs to be more flexible; - * add support for type-specific operators */ - name_matcher_t value; -} attr_matcher_t; -#define ATTR_M(m) ((attr_matcher_t *)(m)) - -/* match services */ -typedef struct { - obj_matcher_t super; - /* match by attributes assigned to the service */ - attr_matcher_t *attr; -} service_matcher_t; -#define SERVICE_M(m) ((service_matcher_t *)(m)) - -/* match hosts */ -typedef struct { - obj_matcher_t super; - /* match by services assigned to the host */ - service_matcher_t *service; - /* match by attributes assigned to the host */ - attr_matcher_t *attr; -} host_matcher_t; -#define HOST_M(m) ((host_matcher_t *)(m)) - typedef struct { sdb_store_matcher_t *m; sdb_store_lookup_cb cb; @@ -263,17 +203,10 @@ match_host(host_matcher_t *m, sdb_store_base_t *obj) /* generic matchers */ -enum { - MATCHER_OR, - MATCHER_AND, - MATCHER_ATTR, - MATCHER_SERVICE, - MATCHER_HOST, -}; - typedef int (*matcher_cb)(sdb_store_matcher_t *, sdb_store_base_t *); -/* this array needs to be indexable by the matcher types */ +/* this array needs to be indexable by the matcher types; + * -> update the enum in store-private.h when updating this */ static matcher_cb matchers[] = { match_logical, match_logical,