From 84a333d6b05b8a94865dc2d4252b3826ca964170 Mon Sep 17 00:00:00 2001 From: siboud Date: Mon, 7 Feb 2005 02:45:57 +0000 Subject: [PATCH] work on the core filter.c filter.h added parser for string expression + binary search tree git-svn-id: http://ltt.polymtl.ca/svn@866 04897980-b3bd-0310-b5e0-8ef037075253 --- ltt/branches/poly/lttv/lttv/filter.c | 122 +++++++++++++++++++-------- ltt/branches/poly/lttv/lttv/filter.h | 52 +++++++++++- 2 files changed, 137 insertions(+), 37 deletions(-) diff --git a/ltt/branches/poly/lttv/lttv/filter.c b/ltt/branches/poly/lttv/lttv/filter.c index a5185ae4..a25b99c4 100644 --- a/ltt/branches/poly/lttv/lttv/filter.c +++ b/ltt/branches/poly/lttv/lttv/filter.c @@ -24,40 +24,6 @@ #include -typedef enum _lttv_expression_op -{ LTTV_FIELD_EQ, - LTTV_FIELD_NE, - LTTV_FIELD_LT, - LTTV_FIELD_LE, - LTTV_FIELD_GT, - LTTV_FIELD_GE -} lttv_expression_op; - -typedef enum _lttv_expression_type -{ - LTTV_EXPRESSION, - LTTV_SIMPLE_EXPRESSION -} lttv_expression_type; - -typedef struct _lttv_simple_expression -{ - lttv_expression_op op; - char *field_name; - char *value; -} lttv_simple_expression; - -typedef struct _lttv_expression -{ - gboolean or; - gboolean not; - gboolean simple_expression; -// union e -// { -// lttv_expression *e; -// lttv_field_relation *se; -// }; -} lttv_expression; - /* read_token @@ -82,14 +48,39 @@ typedef struct _lttv_expression */ /** - * create a new lttv_filter + * Add an filtering option to the current tree + * @param expression Current expression to parse + * @return success/failure of operation + */ +gboolean +parse_simple_expression(GString* expression) { + + unsigned i; + + for(i=0;i0 ) { + g_warning("Wrong filtering options, the string\n\"%s\"\n\ + is not valid due to parenthesis incorrect use",expression); + return NULL; + } } +/** + * Apply the filter to a specific trace + * @param filter the current filter applied + * @param tracefile the trace to apply the filter to + * @return success/failure of operation + */ gboolean lttv_filter_tracefile(lttv_filter *filter, void *tracefile) { } +/** + * Apply the filter to a specific event + * @param filter the current filter applied + * @param event the event to apply the filter to + * @return success/failure of operation + */ gboolean lttv_filter_event(lttv_filter *filter, void *event) { diff --git a/ltt/branches/poly/lttv/lttv/filter.h b/ltt/branches/poly/lttv/lttv/filter.h index c6a53e58..2135f5f3 100644 --- a/ltt/branches/poly/lttv/lttv/filter.h +++ b/ltt/branches/poly/lttv/lttv/filter.h @@ -45,11 +45,61 @@ */ +/** + * @enum lttv_expression_op + */ +typedef enum _lttv_expression_op +{ + LTTV_FIELD_EQ, /** equal */ + LTTV_FIELD_NE, /** not equal */ + LTTV_FIELD_LT, /** lower than */ + LTTV_FIELD_LE, /** lower or equal */ + LTTV_FIELD_GT, /** greater than */ + LTTV_FIELD_GE /** greater or equal */ +} lttv_expression_op; + +typedef enum _lttv_expression_type +{ + LTTV_EXPRESSION, + LTTV_SIMPLE_EXPRESSION +} lttv_expression_type; + +typedef struct _lttv_simple_expression +{ + lttv_expression_op op; + char *field_name; + char *value; +} lttv_simple_expression; + +typedef struct _lttv_expression +{ + gboolean or; + gboolean not; + gboolean and; + gboolean xor; + gboolean simple_expression; +// union e +// { +// struct lttv_expression *e; +// lttv_field_relation *se; +// }; +} lttv_expression; + +typedef struct _lttv_filter_tree { + lttv_expression* node; + struct lttv_filter_tree* r_child; + struct lttv_filter_tree* l_child; +} lttv_filter_tree; + /** * @struct lttv_filter * ( will later contain a binary tree of filtering options ) */ -typedef struct _lttv_filter lttv_filter; +typedef struct _lttv_filter { + lttv_filter_tree* tree; +} lttv_filter; + +gboolean parse_simple_expression(GString* expression); /* Compile the filter expression into an efficient data structure */ -- 2.34.1