+ //g_print("%p: left is %i %p %s\n",t,t->l_child.leaf->field,t->l_child.leaf->op,t->l_child.leaf->value);
+ char* v;
+ g_assert(v = t->l_child.leaf->value);
+ switch(t->l_child.leaf->field) {
+
+ case LTTV_FILTER_TRACE_NAME:
+ if(trace == NULL) lresult = TRUE;
+ else lresult = t->l_child.leaf->op((gpointer)ltt_trace_name(trace),v);
+ break;
+ case LTTV_FILTER_TRACEFILE_NAME:
+ if(tracefile == NULL) lresult = TRUE;
+ else lresult = t->l_child.leaf->op((gpointer)ltt_tracefile_name(tracefile),v);
+ break;
+ case LTTV_FILTER_STATE_PID:
+ if(state == NULL) lresult = TRUE;
+ else lresult = t->l_child.leaf->op((gpointer)&state->pid,v);
+ break;
+ case LTTV_FILTER_STATE_PPID:
+ if(state == NULL) lresult = TRUE;
+ else lresult = t->l_child.leaf->op((gpointer)&state->ppid,v);
+ break;
+ case LTTV_FILTER_STATE_CT:
+ if(state == NULL) lresult = TRUE;
+ else {
+ double val = ltt_time_to_double(state->creation_time);
+ lresult = t->l_child.leaf->op((gpointer)&val,v);
+ }
+ break;
+ case LTTV_FILTER_STATE_IT:
+ if(state == NULL) lresult = TRUE;
+ else {
+ double val = ltt_time_to_double(state->insertion_time);
+ lresult = t->l_child.leaf->op((gpointer)&val,v);
+ }
+ break;
+ case LTTV_FILTER_STATE_P_NAME:
+ /*
+ * FIXME: Yet to be done ( I think ? )
+ */
+ lresult = TRUE;
+ break;
+ case LTTV_FILTER_STATE_EX_MODE:
+ if(state == NULL) lresult = TRUE;
+ else lresult = t->l_child.leaf->op((gpointer)&state->state->t,v);
+ break;
+ case LTTV_FILTER_STATE_EX_SUBMODE:
+ if(state == NULL) lresult = TRUE;
+ else lresult = t->l_child.leaf->op((gpointer)&state->state->n,v);
+ break;
+ case LTTV_FILTER_STATE_P_STATUS:
+ if(state == NULL) lresult = TRUE;
+ else lresult = t->l_child.leaf->op((gpointer)&state->state->s,v);
+ break;
+ case LTTV_FILTER_STATE_CPU:
+ /*
+ * FIXME: What is the comparison value ?
+ */
+ lresult = TRUE;
+ break;
+ case LTTV_FILTER_EVENT_NAME:
+ if(event == NULL) lresult = TRUE;
+ else lresult = t->l_child.leaf->op((gpointer)ltt_event_eventtype(event),v);
+ break;
+
+ case LTTV_FILTER_EVENT_CATEGORY:
+ /*
+ * FIXME: Not yet implemented
+ */
+ lresult = TRUE;
+ break;
+ case LTTV_FILTER_EVENT_TIME:
+// if(event == NULL) lresult = TRUE;
+// else {
+// double val = ltt_time_to_double(event->event_time);
+// lresult = t->l_child.leaf->op((gpointer)&val,v);
+// }
+ lresult = TRUE;
+ break;
+ case LTTV_FILTER_EVENT_TSC:
+// if(event == NULL) lresult = TRUE;
+// else {
+// double val = ltt_time_to_double(event->event_time);
+// lresult = t->l_child.leaf->op((gpointer)&val,v);
+// }
+ /*
+ * FIXME: Where is event.tsc
+ */
+ lresult = TRUE;
+ break;
+ case LTTV_FILTER_EVENT_FIELD:
+ /*
+ * TODO: Use the offset to
+ * find the dynamic field
+ * in the event struct
+ */
+ lresult = TRUE;
+ default:
+ /*
+ * This case should never be
+ * parsed, if so, the whole
+ * filtering is cancelled
+ */
+ g_warning("Error while parsing the filter tree");
+ return TRUE;
+ }