fix seek so that adding and removing a trace from a traceset will work
[lttv.git] / ltt / branches / poly / lttv / lttv / filter.c
index f0eca9cb991323bccfd7add62433ff207beec80f..b7979f3fbdb212a5227268a4ef74b838310711eb 100644 (file)
 #endif
 
 #include <lttv/filter.h>
+#include <ltt/trace.h>
+#include <ltt/type.h>
+#include <stdlib.h>
+#include <string.h>
 
 /**
  * @fn LttvSimpleExpression* lttv_simple_expression_new()
@@ -109,7 +113,7 @@ lttv_simple_expression_assign_field(GPtrArray* fp, LttvSimpleExpression* se) {
   GString* f = NULL;
   
   if(fp->len < 2) return FALSE;
-  g_assert(f=g_ptr_array_remove_index(fp,0)); 
+  g_assert((f=g_ptr_array_remove_index(fp,0))); 
   
   /*
    * Parse through the specified 
@@ -376,7 +380,6 @@ lttv_simple_expression_assign_value(LttvSimpleExpression* se, char* value) {
   gboolean is_double = FALSE;
   LttTime t = ltt_time_zero;
   GString* v;
-  GQuark quark;
   
   switch(se->field) {
      /* 
@@ -421,14 +424,14 @@ lttv_simple_expression_assign_value(LttvSimpleExpression* se, char* value) {
               /* cannot specify number with more than one '.' */
               if(is_double) return FALSE; 
               else is_double = TRUE;
-              t.tv_sec = atoi(v);
+              t.tv_sec = atoi(v->str);
               g_string_free(v,TRUE);
               v = g_string_new("");
           } else g_string_append_c(v,value[i]);
        }
        /* number can be integer or double */
-       if(is_double) t.tv_nsec = atoi(v);
-       else t.tv_sec = atoi(v);
+       if(is_double) t.tv_nsec = atoi(v->str);
+       else t.tv_sec = atoi(v->str);
        
        g_string_free(v,TRUE);
        
@@ -1537,6 +1540,7 @@ lttv_filter_append_expression(LttvFilter* filter, const char *expression) {
 
   if(expression == NULL) return FALSE;
   if(filter == NULL) return FALSE;
+  if(expression[0] == '\0') return FALSE;  /* Empty expression */
 
   GString* s = g_string_new("");
   if(filter->expression != NULL) {
@@ -1608,7 +1612,6 @@ lttv_filter_tree_parse(
         const LttEvent* event,
         const LttTracefile* tracefile,
         const LttTrace* trace,
-        const LttvProcessState* state,
         const LttvTracefileContext* context
         /*,...*/) 
 {
@@ -1649,12 +1652,22 @@ lttv_filter_tree_parse(
    */
     
   gboolean lresult = FALSE, rresult = FALSE;
+
+  LttvProcessState* state;
+  
+  if(LTTV_IS_TRACESET_STATE(context)) {
+    guint cpu = ltt_tracefile_num(context->tf);
+    LttvTraceState *ts = (LttvTraceState*)context->t_context;
+    state = ts->running_process[cpu];
+  } else {
+    state = NULL;
+  }
   
   /*
    * Parse left branch
    */
   if(t->left == LTTV_TREE_NODE) {
-      lresult = lttv_filter_tree_parse(t->l_child.t,event,tracefile,trace,state,context);
+      lresult = lttv_filter_tree_parse(t->l_child.t,event,tracefile,trace,context);
   }
   else if(t->left == LTTV_TREE_LEAF) {
       lresult = lttv_filter_tree_parse_branch(t->l_child.leaf,event,tracefile,trace,state,context);
@@ -1671,7 +1684,7 @@ lttv_filter_tree_parse(
    * Parse right branch
    */
   if(t->right == LTTV_TREE_NODE) {
-      rresult = lttv_filter_tree_parse(t->r_child.t,event,tracefile,trace,state,context);
+      rresult = lttv_filter_tree_parse(t->r_child.t,event,tracefile,trace,context);
   }
   else if(t->right == LTTV_TREE_LEAF) {
       rresult = lttv_filter_tree_parse_branch(t->r_child.leaf,event,tracefile,trace,state,context);
@@ -1726,16 +1739,14 @@ lttv_filter_tree_parse_branch(
         case LTTV_FILTER_TRACE_NAME:
             if(trace == NULL) return TRUE;
             else {
-                char* trace_name = ltt_trace_name(trace);
-                GQuark quark = g_quark_from_string(trace_name);
+                GQuark quark = ltt_trace_name(trace);
                 return se->op((gpointer)&quark,v);
             }
             break;
         case LTTV_FILTER_TRACEFILE_NAME:
             if(tracefile == NULL) return TRUE;
             else {
-                char* tracefile_name = ltt_tracefile_name(tracefile);
-                GQuark quark = g_quark_from_string(tracefile_name);
+                GQuark quark = ltt_tracefile_name(tracefile);
                 return se->op((gpointer)&quark,v);
             }
             break;
@@ -1784,9 +1795,11 @@ lttv_filter_tree_parse_branch(
         case LTTV_FILTER_STATE_CPU:
             if(context == NULL) return TRUE;
             else {
-              /* FIXME: not sure of that one */
-              GQuark quark = ((LttvTracefileState*)context)->cpu_name;
-              return se->op((gpointer)&quark,v);
+              /* FIXME: not sure of that one  Mathieu : fixed.*/
+ //             GQuark quark = ((LttvTracefileState*)context)->cpu_name;
+ //                return se->op((gpointer)&quark,v);
+              if(state == NULL) return TRUE;
+              else return se->op((gpointer)&state->cpu,v);
             }
             break;
         case LTTV_FILTER_EVENT_NAME:
@@ -1794,8 +1807,7 @@ lttv_filter_tree_parse_branch(
             else {
               LttEventType* et;
               et = ltt_event_eventtype(event);
-              char* event_name = ltt_eventtype_name(et);
-              GQuark quark = g_quark_from_string(event_name);
+              GQuark quark = ltt_eventtype_name(et);
               return se->op((gpointer)&quark,v);
             }
             break;
This page took 0.025213 seconds and 4 git commands to generate.