filter text module:
[lttv.git] / ltt / branches / poly / lttv / lttv / filter.c
index 0cabb88cf7f0f6ffc1fa2cbe045fb39676c3ef02..dcb3350e247f07bed06ba6b29ea6579401047194 100644 (file)
@@ -102,7 +102,7 @@ lttv_filter_tree_add_node(GPtrArray* stack, LttvFilterTree* subtree, LttvLogical
   t2->node = op;
   if(subtree != NULL) {
     t2->left = LTTV_TREE_NODE;
-    t2->l_child.t = (LttvFilterTree*)subtree;
+    t2->l_child.t = subtree;
     subtree = NULL;
     t1->right = LTTV_TREE_NODE;
     t1->r_child.t = t2;
@@ -133,7 +133,7 @@ lttv_simple_expression_new() {
   se->field = LTTV_FILTER_UNDEFINED;
   se->op = NULL;
   se->offset = 0;
-//  se->value = NULL;
+  se->value.v_uint64 = 0;
 
   return se;
 }
@@ -397,7 +397,7 @@ gboolean lttv_simple_expression_assign_operator(LttvSimpleExpression* se, LttvEx
  */
 gboolean lttv_simple_expression_assign_value(LttvSimpleExpression* se, char* value) {
 
-  g_print("se->value:%s\n",value);
+//  g_print("se->value:%s\n",value);
   
   switch(se->field) {
      /* 
@@ -450,6 +450,14 @@ void
 lttv_simple_expression_destroy(LttvSimpleExpression* se) {
   
  // g_free(se->value);
+  switch(se->field) {
+     case LTTV_FILTER_TRACE_NAME:
+     case LTTV_FILTER_TRACEFILE_NAME:
+     case LTTV_FILTER_STATE_P_NAME:
+     case LTTV_FILTER_EVENT_NAME:
+       g_free(se->value.v_string);
+       break;
+  }
   g_free(se);
 
 }
@@ -564,6 +572,7 @@ gboolean lttv_apply_op_eq_double(gpointer v1, LttvFieldValue v2) {
  */
 gboolean lttv_apply_op_eq_string(gpointer v1, LttvFieldValue v2) {
   char* r = (char*) v1;
+  g_print("v1:%s = v2:%s\n",r,v2.v_string);
   return (!g_strcasecmp(r,v2.v_string));
 }
 
@@ -958,7 +967,7 @@ lttv_filter_update(LttvFilter* filter) {
   
   if(filter->expression == NULL) return FALSE;
   
-  unsigned     
+  int  
     i, 
     p_nesting=0;       /* parenthesis nesting value */
 
@@ -975,7 +984,7 @@ lttv_filter_update(LttvFilter* filter) {
    * destroy it and build a new one
    */
   if(filter->head != NULL) lttv_filter_tree_destroy(filter->head);
-  filter->head = tree;
+  filter->head = NULL;    /* will be assigned at the end */
  
   /*
    * Tree Stack
@@ -1027,8 +1036,8 @@ lttv_filter_update(LttvFilter* filter) {
    *    3. pop the tree value from the tree stack
    */
   
-  g_print("expression: %s\n",filter->expression);
-  g_print("strlen(expression): %i\n",strlen(filter->expression));
+//  g_print("expression: %s\n",filter->expression);
+//  g_print("strlen(expression): %i\n",strlen(filter->expression));
   for(i=0;i<strlen(filter->expression);i++) {
     // debug
     g_print("%c ",filter->expression[i]);
@@ -1066,7 +1075,7 @@ lttv_filter_update(LttvFilter* filter) {
       
       case '|':   /* or */
       
-        t1 = (LttvFilter*)g_ptr_array_index(tree_stack,tree_stack->len-1);
+        t1 = (LttvFilterTree*)g_ptr_array_index(tree_stack,tree_stack->len-1);
          while(t1->right != LTTV_TREE_IDLE) {
           g_assert(t1->right == LTTV_TREE_NODE);
           t1 = t1->r_child.t;
@@ -1093,7 +1102,7 @@ lttv_filter_update(LttvFilter* filter) {
       
       case '^':   /* xor */
         
-        t1 = (LttvFilter*)g_ptr_array_index(tree_stack,tree_stack->len-1);
+        t1 = (LttvFilterTree*)g_ptr_array_index(tree_stack,tree_stack->len-1);
         while(t1->right != LTTV_TREE_IDLE) {
           g_assert(t1->right == LTTV_TREE_NODE);
           t1 = t1->r_child.t;
@@ -1127,7 +1136,7 @@ lttv_filter_update(LttvFilter* filter) {
           lttv_simple_expression_assign_operator(a_simple_expression,LTTV_FIELD_NE);
           i++;
         } else {  /* ! */
-          t1 = (LttvFilter*)g_ptr_array_index(tree_stack,tree_stack->len-1);
+          t1 = (LttvFilterTree*)g_ptr_array_index(tree_stack,tree_stack->len-1);
           while(t1->right != LTTV_TREE_IDLE) {
              g_assert(t1->right == LTTV_TREE_NODE);
              t1 = t1->r_child.t;
@@ -1177,14 +1186,12 @@ lttv_filter_update(LttvFilter* filter) {
           //a_simple_expression->value = g_string_free(a_field_component,FALSE);
           a_field_component = g_string_new("");
           t1 = g_ptr_array_index(tree_stack,tree_stack->len-1);
-          g_print("here\n");
           while(t1->right != LTTV_TREE_IDLE) {
              g_print("while right:%i %p->child:%p\n",t1->right,t1,t1->r_child.t);
              g_assert(t1->right == LTTV_TREE_NODE);
              g_assert(t1->r_child.t != NULL);
              t1 = t1->r_child.t;
           }
-          g_print("here2\n");
           t1->right = LTTV_TREE_LEAF;
           t1->r_child.leaf = a_simple_expression;
           a_simple_expression = lttv_simple_expression_new(); 
@@ -1235,21 +1242,21 @@ lttv_filter_update(LttvFilter* filter) {
          * in a_field_path array.
          */
         /* FIXME: check for double values */
-//        if(a_simple_expression->op == NULL) {
+        if(a_simple_expression->field == LTTV_FILTER_UNDEFINED) {
           g_ptr_array_add( a_field_path,(gpointer) a_field_component );
           a_field_component = g_string_new("");
-//        }
+        }
+        break;
+      case ' ':
+      case '\n':
         break;
-//    case ' ':
-//    case '\n':
-//      ignore
       default:    /* concatening current string */
         g_string_append_c(a_field_component,filter->expression[i]);
     }
   }
 
-  g_print("subtree:%p, tree:%p, t1:%p, t2:%p\n",subtree,tree,t1,t2);
-  g_print("stack size: %i\n",tree_stack->len);
+//  g_print("subtree:%p, tree:%p, t1:%p, t2:%p\n",subtree,tree,t1,t2);
+//  g_print("stack size: %i\n",tree_stack->len);
 
   /*
    * Preliminary check to see
@@ -1289,15 +1296,17 @@ lttv_filter_update(LttvFilter* filter) {
   g_ptr_array_free(a_field_path,TRUE);
 
   /* free the tree stack -- but keep the root tree */
-  g_ptr_array_free(tree_stack,FALSE);
-
+ // g_ptr_array_free(tree_stack,FALSE);
+  filter->head = g_ptr_array_remove_index(tree_stack,0);
+  g_ptr_array_free(tree_stack,TRUE);
+  
   /* free the field buffer if allocated */
   if(a_field_component != NULL) g_string_free(a_field_component,TRUE); 
  
   /* free the simple expression buffer if allocated */
   if(a_simple_expression != NULL) lttv_simple_expression_destroy(a_simple_expression);
   
-  g_assert(tree != NULL); /* tree should exist */
+  g_assert(filter->head != NULL); /* tree should exist */
   g_assert(subtree == NULL); /* remaining subtree should be included in main tree */
   
   /* debug */
@@ -1326,7 +1335,7 @@ lttv_filter_destroy(LttvFilter* filter) {
 }
 
 /**
- *  LttvFilterTree* lttv_filter_tree_new()
+ *  @fn LttvFilterTree* lttv_filter_tree_new()
  * 
  *  Assign a new tree for the current expression
  *  or sub expression
@@ -1336,11 +1345,13 @@ LttvFilterTree*
 lttv_filter_tree_new() {
   LttvFilterTree* tree;
 
-  tree = g_new(LttvFilter,1);
+  tree = g_new(LttvFilterTree,1);
   tree->node = 0; //g_new(lttv_expression,1);
   tree->left = LTTV_TREE_IDLE;
   tree->right = LTTV_TREE_IDLE;
-
+  tree->r_child.t = NULL;
+  tree->l_child.t = NULL;
+  
   return tree;
 }
 
@@ -1402,12 +1413,12 @@ lttv_filter_tree_destroy(LttvFilterTree* tree) {
   if(tree->right == LTTV_TREE_LEAF) lttv_simple_expression_destroy(tree->r_child.leaf);
   else if(tree->right == LTTV_TREE_NODE) lttv_filter_tree_destroy(tree->r_child.t);
 
-  g_free(tree->node);
+//  g_free(tree->node);
   g_free(tree);
 }
 
 /**
- *  gboolean lttv_filter_tree_parse(LttvFilterTree*,LttEvent,LttTracefile,LttTrace,LttvProcessState)
+ *  @fn gboolean lttv_filter_tree_parse(LttvFilterTree*,LttEvent,LttTracefile,LttTrace,LttvProcessState)
  * 
  *  Global parsing function for the current
  *  LttvFilterTree
@@ -1706,6 +1717,7 @@ lttv_filter_tree_parse(
     case LTTV_LOGICAL_AND: return (lresult & rresult);
     case LTTV_LOGICAL_NOT: return (!rresult);
     case LTTV_LOGICAL_XOR: return (lresult ^ rresult);
+    case 0: return (rresult);
     default: 
       /*
        * This case should never be 
@@ -1744,7 +1756,7 @@ lttv_print_tree(LttvFilterTree* t) {
 }
 
 /**
- *  gboolean lttv_filter_tracefile(LttvFilter*, LttTracefile*)
+ *  @fn gboolean lttv_filter_tracefile(LttvFilter*, LttTracefile*)
  * 
  *     Apply the filter to a specific trace
  *     @param filter the current filter applied
@@ -1794,7 +1806,7 @@ static void module_init()
 }
 
 /**
- *  Destroys the filter module and specific values
+ *  @fn Destroys the filter module and specific values
  */
 static void module_destroy() 
 {
This page took 0.025884 seconds and 4 git commands to generate.