+/**
+ * @enum LttvLogicalOp
+ * @brief logical operators
+ *
+ * Contains the possible values taken
+ * by logical operator used to link
+ * simple expression. Values are
+ * AND, OR, XOR or NOT
+ */
+typedef enum _LttvLogicalOp {
+ LTTV_LOGICAL_OR = 1, /* 1 */
+ LTTV_LOGICAL_AND = 1<<1, /* 2 */
+ LTTV_LOGICAL_NOT = 1<<2, /* 4 */
+ LTTV_LOGICAL_XOR = 1<<3 /* 8 */
+} LttvLogicalOp;
+
+/**
+ * @struct LttvFilterTree
+ * The filtering tree is used to represent the
+ * expression string in its entire hierarchy
+ * composed of simple expressions and logical
+ * operators
+ */
+typedef struct _LttvFilterTree {
+ int node; /** value of LttvLogicalOp */
+ LttvTreeElement left;
+ LttvTreeElement right;
+ union {
+ struct LttvFilter* t;
+ LttvSimpleExpression* leaf;
+ } l_child;
+ union {
+ struct LttvFilter* t;
+ LttvSimpleExpression* leaf;
+ } r_child;
+} LttvFilterTree;
+
+/**
+ * @struct lttv_filter
+ * Contains a binary tree of filtering options along
+ * with the expression itself.
+ */
+typedef struct _LttvFilter {
+ char *expression;
+ LttvFilterTree *head;
+}